我定义了一个整型n,用scanf输入值,然后又用到swicth中,但当我输入字符的时候却会进入死循环
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是因为当你输入字符时,scanf函数会将字符留在输入缓冲区中,而switch语句又会不断读取缓冲区的内容进行匹配,导致了死循环。
为了避免这种情况,可以在使用scanf函数后使用fflush(stdin)函数清空输入缓冲区,或者使用getchar函数将输入缓冲区中的字符读取并忽略掉。例如:
int n;
scanf("%d", &n);
fflush(stdin); //清空输入缓冲区
switch(n) {
//...
}
或者:
int n;
scanf("%d", &n);
while(getchar() != '\n'); //读取并忽略输入缓冲区中的字符
switch(n) {
//...
}
这样就能避免由于输入错误类型导致的死循环问题。
用%d输入时,输入字符就会是这个效果
该回答引用ChatGPT
这是因为当您使用scanf函数输入一个字符时,它会将字符存储在输入缓冲区中。然后当您尝试读取下一个输入时,scanf函数会继续从缓冲区中读取先前输入的字符而不会等待新的输入,这会导致无限循环。
为了解决这个问题,您可以在使用scanf函数读取字符后,使用另一个getchar()函数来读取输入缓冲区中的换行符。例如:
int n;
scanf("%d", &n);
getchar(); // 读取输入缓冲区中的换行符
switch (n) {
// ...
}
在上面的代码中,getchar()函数会读取输入缓冲区中的换行符,这样在下一次使用scanf函数之前,缓冲区中的字符就会被清空,避免了死循环的问题。
因为遇到非数字也非分隔符的时候,scanf+%d的组合不会将它从缓冲区里读出来,而会留在里面
你应该判断scanf的返回值,如果出错了就用gets将缓冲区清空,要求用户重新输入
否则肯定是死循环呀