You need to enable JavaScript to run this app. 使用getchar()读取输入赋值给指针指向变量时数值未正确更新的问题求助
优惠活动
大模型
产品
解决方案
定价
更多

使用getchar()读取输入赋值给指针指向变量时数值未正确更新的问题求助

代码问题排查与修复

核心问题定位

  • 写入逻辑的触发条件完全错位:现有代码仅在getchar()读到换行符'\n'时,才会给*ciphertext赋值,正常输入的非换行内容永远走不到写入分支,自然无法更新指针指向的内存值。
  • 循环终止逻辑设计错误:循环初始条件为count_newline_chars <= 0,第一次进入循环读到非换行字符时,代码会直接执行count_newline_chars +=1,让计数变为1,循环立刻终止——整个流程下来根本没有对读到的有效输入做任何写入操作。
  • 变量作用逻辑偏差:定义的count_newline_chars本意是统计换行符数量,实际代码却是用它统计非换行字符数,逻辑和变量定义完全脱节。

修复参考代码

// 前置说明:ciphertext为int*类型的有效非空指针,指向初始值为0的内存空间
int count_newline_chars = 0;
int input_first_line = 0;

// 持续读取直到碰到换行或流结束
while ((input_first_line = getchar()) != '\n' && input_first_line != EOF)
{
    // 非空判断避免空指针解引用
    if (ciphertext)
    {
        *ciphertext = input_first_line;
    }
    count_newline_chars += 1;
}

额外注意事项

  • 如果需求是存储输入对应的十进制整数值,需要将读到的字符值做ASCII偏移转换:比如读到字符'3'时,需要用input_first_line - '0'才能得到整数3,直接赋值的话存入的是字符对应的ASCII码值(51),不是期望的数字。
  • 如果需要存储整行输入的数值而不是单个字符,还需要在循环里做字符拼接转数值的逻辑,不能只存单次getchar()的返回值。

内容的提问来源于stack exchange,提问作者Aquila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 13:06:05