【发布时间】:2019-01-14 01:55:25
【问题描述】:
#include<stdio.h>
#include<ctype.h>
int main()
{
int number, sum = 0;
// loop body is executed at least once
do
{
printf("Enter a number: ");
scanf("%d", &number);
sum += number;
}
while(number != 0);
printf("Sum = %d",sum);
}
此代码应该打印用户输入的所有整数的总和。但是当用户输入一个字母作为输入时,它并没有抛出错误,而是进入了一个无限循环,打印了“输入数字”语句,但没有在循环中运行任何其他语句。
谁能告诉我为什么会这样?
【问题讨论】:
-
使用
scanf的返回值对你有利,而不是忽略它。 -
你最好在这里使用
strtol() -
scanf在遇到无效输入时不会“抛出错误”。它返回成功分配的接收参数的数量,您的工作是检查该返回值。 -
为清楚起见,请在以后的问题中明确说明预期行为。你显然不想要一个无限循环。但是,您是否希望输入流中的错误数据被修剪掉,或者只是在错误输入时中断循环,这都留给了读者的想象。其中之一很简单(您选择的答案);另一个要复杂得多。除非你澄清你想要的行为,否则任何一个都是可以接受的答案。
-
另一个重复的Why is scanf() causing infinite loop in this code?,至少还有50个。您可能还想仔细关注这里的讨论Is populating an integer array the same as populating a float one?
标签: c