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

C语言统计scanf输入条目数时如何排除终止输入的0值

问题分析

你当前代码存在两类问题,直接导致计数错误,甚至可能运行异常:

  • 语法错误:
    • amt = 1 语句末尾缺失分号
    • 输出函数名拼写错误,prinf 应为 printf,且该语句多传了无对应占位符的amt参数
    • 计数变量entries未初始化,初始值是内存随机垃圾值,计数结果本身就不可靠
    • 标准C规范中main函数应返回int类型,不应定义为void main
  • 逻辑错误:
    你直接将scanf的返回值(成功读取的输入项数)累加到计数变量中,无论读到的数值是不是0都会加1,因此作为终止符的0也被计入条目,输入5、6、7、9、0时自然会得到错误结果5。
修正后代码

核心逻辑调整为先读取输入值,判断数值非0后再累加计数,修正所有语法问题后的完整代码如下:

#include <stdio.h>
int main(void)
{
    int amt, entries = 0; // 计数变量初始值设为0
    do {
        printf("Enter amount: ");
        // 校验输入合法性,避免输入非整数时陷入死循环
        if (scanf("%d", &amt) != 1) {
            break;
        }
        // 仅当读取到的数值非0时,计数加1
        if (amt != 0) {
            entries++;
        }
    } while (amt != 0); // 读到0时终止循环

    printf("\nNumber of entries: %d", entries);
    return 0;
}
效果验证

依次输入5、6、7、9、0时,程序会正确统计4个非0条目,输出结果为Number of entries: 4,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:36:14