设计菜单,重复消息

时间:2014-06-23 08:52:32

标签: c algorithm menu

我正在开发一个控制台应用程序,应该有一个小菜单可供选择。我提出了两个想法,其中一个我使用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;
}

2 个答案:

答案 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) {}