我正在学习c并理解这种语言是低级的,在这种情况下缺少异常处理。无限循环scanf函数
我做了一个简单的程序,用户从菜单中选择一些选项。它就是这么简单!
该程序分为几个方法 - 其中一种方法等待用户按一个键 - 一个整数是预期的。然后将这个整数返回到另一个保存开关结构的方法。
按下字符时会出现问题 - 在大多数情况下,会启动else块的无限循环。
您必须选择一个替代0 - 2。请重试:-)
您必须选择一个替代0 - 2。请重试:-)
必须选择替代0 - 2。请重试:-)
......等等
我实际上并不ķ现在该如何解决。我试图使用scanf函数的返回值而没有成功。我也尝试传递一个字符(而不是整数)作为scanf函数的参数 - 也没有成功。
任何建议如何处理这个问题?
#include <stdio.h>
#include <stdlib.h>
void menu();
void runSelection(int selection);
int getSelection();
int pause();
int main(void) {
do{
menu();
runSelection(getSelection());
}while(pause());
return 0;
}
int pause() {
int c;
printf("\n\nPress enter to continue!");
fflush(stdout);
/* flush inputstream */
while((c = getchar()) != '\n' && c != EOF);
getchar();
return 1;
}
void menu() {
puts(" * * * * * * M E N U * * * * * * *");
puts("1. Do something 1");
puts("2. Do something 2");
puts("3. Do something 3");
fflush(stdout);
}
void runSelection(int selection) {
switch (selection) {
case 0:
puts("you pressed 0");
break;
case 1:
puts("you pressed 1");
break;
case 2:
puts("you pressed 2");
break;
}
}
int getSelection() {
int key;
int true = 0;
do {
scanf("%d", &key);
if (key >= 0 && key <=2) {
true = 1;
}
else {
puts("You must choose an alternative 0 - 2. Please try again :-)");
fflush(stdout);
}
} while (true == 0);
return key;
}