【发布时间】:2016-12-27 17:17:54
【问题描述】:
有人可以启发如何进行这项工作吗?所以现在我有一个 do/while 循环,里面有一个开关。开关由 int 选择处理,scanf 为“%d”。但是,如果我写一个与数字不同的字符符号,例如 a、b、c ......它会进入无限循环。将 int 更改为 char 并将 %d 更改为 %c 有效,但如果输入错误,菜单会重复 x2 并且变得混乱。对不起英语不好:) 带整数:
int main() {
int choice;
do{
menu();
scanf("%d", &choice);
switch(choice) {
case 1:
// 1-vo poduslovie
ReadSave();
break;
case 2:
// 2-ro poduslovie
ShowResult();
break;
case 3:
// 3-to poduslovie
SavetoScreen();
break;
case 4:
// 4-to poduslovie
PrinttoScreen();
break;
case 5: // exit
return 0;
default:
printf("Wrong choice.\n");
}
}while(choice!=5);
带字符:
int main() {
char choice;
do{
menu();
scanf("%c", &choice);
switch(choice) {
case '1':
// 1-vo poduslovie
ReadSave();
break;
case '2':
// 2-ro poduslovie
ShowResult();
break;
case '3':
// 3-to poduslovie
SavetoScreen();
break;
case '4':
// 4-to poduslovie
PrinttoScreen();
break;
case '5': // exit
return 0;
default:
printf("Wrong choice.\n");
}
}while(choice!='5');
【问题讨论】:
-
显示每个案例的示例输入序列。
-
另外,修正括号和缩进。
-
scanf("%c", &choice);==>scanf(" %c", &choice);请注意多余的空间。%c格式否则会读取 下一个字符,而其他格式会过滤掉空格。 -
更好的是,使用
fgets并应用sscanf并始终检查其返回值。scanffamily 的返回值是多少?阅读手册页。使用fgets,转储字符串并重试比尝试清除错误输入更容易,否则会继续阻塞缓冲区。 -
您应该始终检查来自
scanf的返回值,以确保它读取了您预期的项目数并且没有失败或命中eof。
标签: c