我一直在研究需要整数输入的程序,但每次意外输入非整数时,scanf函数都会停止工作或陷入循环。
这是我尝试做的一个例子:
int n;
printf("please enter 0 or 1\n");
top:
scanf("%i",&n);
if(n == 0)
{
printf("you entered 0!\n");
}
if(n == 1)
{
printf("you entered 1!\n");
}
if(n != 0 && n != 1)
{
printf("please enter either 0 or 1.");
goto top;
}
如果您没有输入正确的号码,第三个是将您送回到顶部,但这对于字母和其他字符不起作用。 如果给出非整数输入,如何将其发送回顶部?
答案 0 :(得分:0)
这可以通过使用以下内容替换scanf("%i",&n);
调用来解决:
char buffer[256];
char *s = fgets(buffer, 256, stdin);
if (s != buffer)
{
// Some error occurred
goto top;
}
int error = sscanf(buffer, "%i", &n);
if (error == 0)
{
// The string read is not a number!
printf("please enter either 0 or 1.");
goto top;
}
答案 1 :(得分:0)
试试这个
#include <stdio.h>
int main(void){
int n;
printf("please enter 0 or 1\n");
for(;;){
int status;
char ch;
status = scanf("%i%c", &n, &ch);//check return value of scanf, ch : for check rest input
if(status == EOF){
printf("Bye!!\n", n);
return 0;
} else if(status == 2 && ch == '\n'){
if(n == 0 || n == 1){
printf("you entered %i!\n", n);
break;
}
} else {
while(getchar() != '\n');//clear input
}
printf("please enter either 0 or 1.\n");
}
return 0;
}