抱歉标题不好,但我不知道更好的标题!
目标:我正在尝试创建一个命令处理程序。所以我通过printf("cmd: ")
打印并通过fgets()
在stdin上列出。如果是输入我通过if .. else if
检查命令。所以现在我的问题是:如果stdin上没有输入,它应该重复该功能并打印cmd!
int cmd_handler()
{
printf("cmd: ");
char command[LINE_MAX];
fgets(command, LINE_MAX, stdin);
if(command != NULL)
{
if(strcmp(command, "xyz"))
{
xyz();
}
}
return 0;
}
我真的不知道如何安排。 else
上的简单调用cmd_handler()无效。也许有人可以给我一个提示如何解决它。
编辑:
如果在stdin上没有输入(例如2x),它应该看起来像这样:
cmd:
cmd:
cmd:
这个代码不是真正的代码!
问候
答案 0 :(得分:0)
你需要一个循环。我建议使用退出条件的while循环,也许可以通过“exit”命令设置。
int run = 1;
while (run) {
printf("cmd: ");
...
else if (strcmp(command, "exit") == 0) {
run = 0;
}
}
答案 1 :(得分:0)
您需要检查fgets()
是否返回NULL,而不是命令是否为NULL:
if (fgets(command, LINE_MAX, stdin) != NULL)
然后,您可以添加'else'子句来处理错误情况,就像您尝试的那样。
答案 2 :(得分:0)
检查空字符串的方式不起作用。
if(command != NULL)
此条件将始终求值为true,因为表达式中的command
将转换为指针并始终为非null。
要检查是否有字母数字字符,请使用isalnum()
中的<ctype.h>
并确保command
中没有空格字符。你似乎想要使用递归,而循环可能更适合。
char command[LINE_MAX];
int alnum=0;
while(1) {
alnum=0;
printf("cmd: ");
fgets(command, LINE_MAX, stdin);
for(i=0;i<strlen(command);i++)
if(isalnum(command[i])) {
alnum=1;
break;
}
if(!alnum) continue;
if(strcmp(command, "xyz"))
{
xyz();
}
....
break;
}
这样,您可以确保它处理您可能输入的任何空格。但是,如果用户输入strcmp(command"xyy")
,则" xyz"
的其余部分将失败。因此,检查用户是否只需点击 ENTER :
if(command[0] == '\n') continue;
使用alnum()
代替上述检查。