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
相关产品推荐
相关产品推荐

