C:捕获空输入和打印命令提示符

时间:2013-12-10 19:53:54

标签: c event-handling fgets

抱歉标题不好,但我不知道更好的标题!

目标:我正在尝试创建一个命令处理程序。所以我通过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:

这个代码不是真正的代码!

问候

3 个答案:

答案 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()代替上述检查。