C noob在这里。只是忽略标题找不到更好的标题:D
void displayMainMenu() {
int choice;
do {
printf("1. Start the game.\n");
printf("2. Recruit troops.\n");
printf("3. Exit.\n");
scanf("%d", &choice);
} while (choice < 1 || choice > 3);
switch (choice) {
case(1) : printf("...");
break;
case(2) : printf("...");
break;
case(3) : printf("...");
exit(0);
break;
}
}
当我输入一个超出范围的数字时,它会完全循环,但是当我输入一个字母或一个符号时,它会进入无限循环。我希望我的程序是完美的,即使我是初学者,所以我想知道如何实现这一目标?我应该使用ASCII还是有完全不同的方法来做这种事情。
非常感谢你的帮助!
答案 0 :(得分:2)
为什么它变得无限的原因:scanf
拒绝"%d"
的字母并且没有任何内容可读。请注意,没有消耗输入缓冲区中的字母,因此下次调用scanf
时它会再次失败。
要详细了解相关信息,请检查scanf
:0
或EOF
的返回值,无需读取,1
读取1个项目。
因此解决方案是检查scanf
的返回值并跳出循环。
添加了一个例子:
do {
printf("1. Start the game.\n");
printf("2. Recruit troops.\n");
printf("3. Exit.\n");
int item_got = scanf("%d", &choice);
if (item_got != 1)
{
choice = -1; // mark it.
break;
}
} while (choice < 1 || choice > 3);
答案 1 :(得分:2)
scanf("%d", &choice);
scanf("%*[^\n]%*c");//add
答案 2 :(得分:0)
如果无法读取格式化输入,则scanf()函数返回0。因此,如果您想在用户输入此类输入时退出,则可以编写:
if(!scanf("%d", &choice))break;