因此,该程序在循环内部接受三个值,一个int,一个float和一个char。 当它要求用户输入整数并且他们写..让我们说,“House”程序陷入无限循环。
#include <stdio.h>
int main(void){
int i;
float f;
char c;
while(i!=99){
printf("Enter an int, a float and a char separated by commas: ");
int count = scanf("%d,%f,%c",&i,&f,&c);
printf("Int is: %d, Float is: %1.f, Char is: %c",i,f,c);
if (count != 2){
fflush(stdin);
printf("\nerror\n");
}
}
return 0;
}
答案 0 :(得分:1)
在此 -
if (count != 2){
fflush(stdin); // undefined behaviour
printf("\nerror\n");
}
另外,count
应针对3
而非2
进行测试(scanf
如果成功将返回3
)。而不是fflush(stdin)
,使用它来清除输入流 -
int c;
if (count != 3){
while((c=getchar())!='\n' && c!= EOF);
printf("\nerror\n");
}
你还有i
未初始化。因此,要么初始化它,要么使用while
循环使用do-while
-
do{
//your code
}while(i!=99);
答案 1 :(得分:1)
scanf()
保留不被解释为要读取的数据的字符,因此在下一次迭代中,scanf()
尝试再次读取字符并再次失败,然后它将导致无限循环。fflush(stdin);
是未定义的行为,不使用它。i
中使用了未初始化的i!=99
,这也是未定义的行为。试试这个:
#include <stdio.h>
int main(void){
int i=0;
float f=0.0f;
char c=' ';
while(i!=99){
printf("Enter an int, a float and a char separated by commas: ");
int count = scanf("%d,%f,%c",&i,&f,&c);
printf("Int is: %d, Float is: %1.f, Char is: %c",i,f,c);
if (count != 3){ /* adjusted to match the scanf */
int dummy;
while((dummy=getchar())!='\n' && dummy!=EOF); /* skip one line */
printf("\nerror\n");
if (dummy == EOF) break; /* there won't be any more input... */
}
}
return 0;
}