只读一个字符(避免换行),然后读一个字符串(用于实现简单的CLI

问题描述 投票:0回答:2

我需要实现一个简单的CLI,它最初将读取一个字符,然后将读取由字符指定的命令的第二部分,甚至第三部分。

例如,这些是命令:

1. p all
2. r code
3. h
4. q

因此,您可以看到有些命令只需要一个字符,而其他命令则需要一个字符和一个字符串。

到目前为止我所做的是: //为角色

char init_command;
char command[30];
while(flag) {
    read(STDIN_FILENO, &init_command, 1)
    switch(init_command)
    {
       case ('p'):
            if (fgets(command, sizeof(command), stdin) == NULL)
            {
                perror("fgets print");
                exit(EXIT_FAILURE);
            }
            else
                sscanf(command, "%s", command);
            break;
       case ('h'):
           printfhelp();
           break;
       default:
           printf("Undefined command\n");
           break;
   }
}

我已经省略了r codeq命令的部分,因为它是相同的。

那么,这里发生的是,如果我键入:

全部

一切都好。但是当我输入这个:

H

它打印printhelp()的输出并立即打印未定义的命令消息。 现在,这必须与\ n charatcter,但我很难纠正它。

c character user-input
2个回答
2
投票

如果\n被视为“有效输入”,只需将其添加到案例结构中:

case '\n':
  break;

这将允许其他输入作为错误传递,但忽略换行符。


0
投票
read(STDIN_FILENO, &init_command, 1);
fgets(command, sizeof(command), stdin);
switch(init_command)
{
   case ('p'):
            sscanf(command, "%s", command);
        break;
   case ('h'):
       printfhelp();
       break;
   default:
       printf("Undefined command\n");
       break;
}
© www.soinside.com 2019 - 2024. All rights reserved.