我在限制用户输入方面遇到了一些问题。我只想要整数1,2或3作为输入。 Do .. while循环执行无效整数输入的工作,但是如何忽略字符串/字符输入?如果输入无效,我还需要重复询问用户。
更新
int problem;
printf("Please select the problem that you want to solve:\n");
printf("\t 1-Problem 1\n");
printf("\t 2-Problem 2\n");
printf("\t 3-Problem 3\n");
while( scanf("%d", &problem)==0 && (problem!=1 || problem !=3 || problem !=2))
{int c;
while((c=getchar())!='\n' && c!=EOF);
printf("Please select the problem that you want to solve:\n");
printf("\t 1-Problem 1\n");
printf("\t 2-Problem 2\n");
printf("\t 3-Problem 3\n");
}
由于多个printfs,它看起来很乱。我只是不想在一行中使用冗长的代码。无论如何,我只想要1,2或3作为输入。如果输入的输入无效,程序将再次询问用户,直到用户输入有效输入。
该代码适用于无效输入,如单词,字母,字符等。但是,如果用户输入1.2,则进行1,但不应该是这种情况。也不接受0。我可以对我的代码做些什么来限制它们?
答案 0 :(得分:2)
scanf
的 %d
将失败,并在输入无效(如字符)时返回0。因此,只需通过检查scanf
的返回值来检查while(scanf("%d",&num)==0 && (num<=1 || num >=3)) //Invalid input if this is true
{
int c;
while((c=getchar())!='\n' && c!=EOF); //Clear the stdin
printf("Invalid input. Try again\n");
}
是否失败。
while((c=getchar())!='\n' && c!=EOF);
该行
scanf
清除标准输入流,以便scanf
不会再次读取无效输入,从而导致无限循环。
请注意,EOF
可以返回scanf
。这将导致程序认为用户输入了有效输入。您可以添加一项检查,以查看EOF
的返回值是否为num
。此外,您应该将{{1}}初始化为不是1,2或3的数字,以避免调用未定义的行为。