我有这个:
float a, b, c;
int isInt;
do {
puts("Please enter three positive lengths:");
isInt = scanf(" %f %f %f", &a, &b, &c);
} while(a <= 0 || b <= 0 || c <= 0 || isInt != 3);
假设我的输入为1 2 f
,然后是a == 1
,b == 2
和c == 0
。更重要的是isInt == 2
,这让我想知道为什么它不会再次正常循环......?
答案 0 :(得分:3)
当scanf(...)
返回3以外的数字时,代码中的问题就是你所做的事情(更具体地说,你不做什么)。
目前,您的代码继续要求输入和循环,而不从输入缓冲区中取任何内容。当然,这会使您的程序进入无限循环。
为了解决此问题,您的代码应该读取并忽略直到下一个'\n'
字符的所有输入。这将确保每次循环迭代都取得一些进展。
do {
puts("Please enter three positive lengths:");
isInt = scanf(" %f %f %f", &a, &b, &c);
if (isInt == EOF) break; // Make sure EOF is handled
if (isInt != 3) {
scanf("%*[^\n]");
a = b = c = -1;
continue;
}
} while(a <= 0 || b <= 0 || c <= 0);