C语言中的命令行菜单

C语言中的命令行菜单,c,C,我正在尝试用C实现一个命令行菜单,这样当用户输入一个字符时,它将立即处理该字符并执行特定的功能。问题是,每当我试图使其在处理每个输入后,再次显示菜单并准备进行新的输入时,程序只会持续读取输入,除非我退出程序,否则永远不会处理它 这是通过以下方式工作1次的代码: char command; command = getchar(); switch(command){ case 'c': //create a new hash table; br

我正在尝试用C实现一个命令行菜单,这样当用户输入一个字符时,它将立即处理该字符并执行特定的功能。问题是,每当我试图使其在处理每个输入后,再次显示菜单并准备进行新的输入时,程序只会持续读取输入,除非我退出程序,否则永远不会处理它

这是通过以下方式工作1次的代码:

char command;
    command = getchar();
    switch(command){
    case 'c':
        //create a new hash table;
        break;

    case 'l':
        //look up a word;
        break;

    case 'f':
        //read a file
        break;

    case 'p':
        //print the table;
        break;

    case 'r':
        //Remove a word
        break;

    case 'q':
        exit(0);
        break;
    }

但是,如果我尝试将它放入无限循环中以继续运行,就像我说的,它将永远不会处理输入,直到我退出程序。

此代码应该适用于您-它适用于我。注意变量
命令
使用了
int

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void)
{
    int command;

    while ((command = getchar()) != EOF)
    {
        switch(command)
        {
        case 'c':
            printf("Create a new hash table\n");
            break;

        case 'l':
            printf("Look up a word\n");
            break;

        case 'f':
            printf("Read a file\n");
            break;

        case 'p':
            printf("Print the table\n");
            break;

        case 'r':
            printf("Remove a word\n");
            break;

        case 'q':
            printf("Quit\n");
            exit(0);
            break;

        default:
            printf("Unexpected input %d (0x%.2X) ('%c')\n",
                   command, command, isgraph(command) ? command : '.');
            break;
        }
    }
    return 0;
}
#包括
#包括
#包括
内部主(空)
{
int命令;
而((command=getchar())!=EOF)
{
开关(命令)
{
案例“c”:
printf(“创建一个新的哈希表”);
打破
案例“l”:
printf(“查找单词”);
打破
案例“f”:
printf(“读取文件”);
打破
案例“p”:
printf(“打印表格”);
打破
案例“r”:
printf(“删除单词”);
打破
案例‘q’:
printf(“退出”);
出口(0);
打破
违约:
printf(“意外输入%d(0x%.2X)(“%c”)\n”,
命令,命令,isgraph(命令)?命令:'.');
打破
}
}
返回0;
}

您的开关中需要一个
默认值
大小写(例如,
printf(“键入的字符是'%c'(值%d)。\n',command,command);break;
)。据我所知,没有实际执行任何操作的代码。您在每个输入字符后都按了“enter”键了吗?我的c有点生锈,但在调用getchar()run”之后(((value=getchar())!='\n')&&&(value!=EOF));”以清除缓冲区。然后,对getchar()的下一次调用应等待输入新字符。这是使用VS2012。此循环应声明并使用“value”变量。请注意
getchar()
和亲属返回的是
int
而不是
char
。这是因为他们必须能够返回任何有效的
char
值加上一个不同的值EOF。使用
char
而不是
int
会导致两个问题之一。如果纯
char
是有符号类型,那么一些有效字符(通常是ÿ,y-umlaut,0xFF,U+00FF,带分音符的拉丁文小写字母y)被错误识别为EFO。如果纯
char
是无符号类型,则分配给
char
变量的值永远不会被识别为EOF。这两种情况都不可接受。