You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言条件循环如何读取符号常量?输入0无法退出循环原因

问题根因

你的判断逻辑混淆了数值0和*字符'0'*的概念:

  • 你定义的宏TEST替换后是数值0,对应ASCII控制字符NUL,这个字符无法通过常规键盘输入直接敲出。
  • 你在键盘上输入数字0时,getchar()实际读取到的是字符常量'0',对应的ASCII编码值为48,和数值0完全不相等,因此循环判断条件永远不会在你输入0时触发终止。
  • 额外注意:终端输入默认是行缓冲模式,你输入的内容会先暂存在缓冲区,按下回车后才会被逐字符送入程序处理。你输入0再按回车时,缓冲区里存储的是'0'(ASCII 48)和换行符'\n'(ASCII 10),两个值都不等于0,自然会被putchar()原样输出,程序不会退出。
    另外你的代码里void main()的写法不符合C标准,标准规定main函数的返回值类型应为int。
修正代码

如果要实现输入数字0时退出循环,需要把判断值改为字符'0',修正后的代码如下:

#include <stdio.h>

// 宏定义匹配键盘输入的数字0字符
#define TEST '0'

int main() {
    int c;
    while ((c = getchar()) != TEST)
        putchar(c);
    return 0;
}

补充提示:用int类型存储getchar()的返回值是正确写法,不要将c定义为char类型——getchar()在读到输入末尾或读取错误时会返回EOF(通常值为-1),无符号char类型无法正确存储该值,会导致判断逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:45:32