之前我遇到过这个问题但是使用其他运算符绕过它。但我认为(getche();
)不能在这里使用相同的运算符。无论如何,这种方法效果很好但是如果我输入一个字母就会进入一个无限循环。
printf("Enter the number of the passenger you wish to edit.");
scanf("%d", &userchoice);
do
{
if(userchoice <= count || userchoice <= 1)
{
flag = 0;
}
else
{
printf("Please enter a valid input!");
scanf("%d", &userchoice);
flag = 1;
}
} while (flag == 1);
答案 0 :(得分:2)
答案 1 :(得分:1)
是的,它会进入。
由于您正在检查userchoice&lt; = 1,因此将比较字母ascii值,该值始终为false,flag将始终为1
P.S:我假设在这里数是一个非常小的数字,因为你没有提供它的价值。
答案 2 :(得分:0)
你的意思是在1和count之间的userchoice,然后第一个if是不正确的。 当您想要测试介于1和计数之间时,此代码有效。
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
signed int count = 5;
signed int flag = 1;
signed int userchoice = 0;
printf("Enter the number of the passenger you wish to edit:");
scanf("%d", &userchoice);
do {
if(userchoice <= count && userchoice >= 1) {
flag = 0;
} else {
char c = '0';
if (scanf("%d", &userchoice) == 0) {
printf("Please enter a valid input!\n");
do {
c = getchar();
}
while (!isdigit(c));
ungetc(c, stdin);
}
}
} while (flag == 1);
printf("Done!");
}
a无效,因为它不是数字,6比计数大。 3是可能的,并被接受。
Enter the number of the passenger you wish to edit:a
Please enter a valid input!
6
3
Done!