我正在开发一个控制台应用程序,应该有一个小菜单可供选择。我提出了两个想法,其中一个我使用int作为一个选择变量,每当我输入一个除数字以外的字符时,它会让我进入无限循环。另一个虽然对我来说似乎更清楚,但我无法理解为什么我得到“选择一个选项不是一个数字选择一个选项”的消息,即使我选择一个有效的理论选项请让我知道我的代码有什么问题。我附上我提到的第二个例子。
#include <stdio.h>
#include <ctype.h>
void F1()
{
printf("Function 1\n");
}
void F2()
{
printf("Function 2\n");
}
void F3()
{
printf("Function 3\n");
}
int main()
{
char c;
printf("MAIN MENU\n"
"1. Function 1\n"
"2. Function 2\n"
"3. Function 3\n"
"4. Exit\n");
while(1)
{
printf("Choose an option ");
scanf("%c", &c);
if(isdigit(c) == 0) printf("Not a digit");
else
{
if(c == '1') F1();
else if(c == '2') F2();
else if(c == '3') F3();
else if(c == '4') break;
else printf("Wrong option");
}
}
return 0;
}
答案 0 :(得分:1)
您需要刷新输入缓冲区,以便通过之前的\n
调用清除scanf
字符后面的内容。在%c
scanf
之前放置一个空格
scanf(" %c", &c);
或者通常在每次调用scanf
之后放置此代码段来刷新输入缓冲区:
int c
while((c = getchar()) != '\n' && c != EOF);
答案 1 :(得分:0)
第一次调用scanf()将实现您键入的字符,第二次调用将读取换行符。
您需要在调用scanf()后完成读取行:
int c2;
while((c2=getchar()) != '\n' && c2 !=EOF) {}