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

C语言if语句条件为真却不执行,输入0_0无法终止计算器循环

问题原因分析
  • 执行顺序逻辑颠倒:你当前的代码是先判断a[n]、operation[n]、b[n]的值,再执行scanf读入用户输入。第一次进入循环时,三个变量都是未初始化的栈区随机值,永远不可能命中0_0的判断条件。即便后续读入了0_0,读完后会立刻执行n++,下一轮循环判断的是新下标n对应的未初始化值,永远匹配不到你刚输入的内容。
  • 下标索引逻辑错误:你每读入一组数据就将n自增,所有已成功读入的有效数据都存储在下标0 ~ n-1的位置,你判断的下标n对应的位置从来没有被写入过用户输入,自然不可能触发判断条件。
  • 额外潜在问题:数组长度仅为20,没有做边界判断,用户输入超过20组数据时会发生数组越界,引发内存访问错误。
修复方案

调整逻辑为:先读入用户输入,再判断是否是0_0终止符,如果是就跳出循环,否则再将下标自增存储下一组数据。如果需要兼容输入带空格的情况(比如3 + 5),可以把scanf的格式串改为%i %c %i,用格式串里的空格自动跳过输入的空白字符。

修复后的参考代码:

int a[20], b[20], result[20];
int n = 0;
char operation[20];
printf("Enter:\n");

while(1)
{
    // 最多存储19组有效运算题,预留1个位置读终止符,避免数组越界
    if(n >= 19) {
        printf("已达到最大输入数量限制\n");
        break;
    }
    scanf("%i%c%i", &a[n], &operation[n], &b[n]);
    // 读完当前输入后立刻判断是否为终止符
    if(a[n] == 0 && operation[n] == '_' && b[n] == 0) {
        break;
    }
    n++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:01