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