我需要实现一个简单的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 code
和q
命令的部分,因为它是相同的。
那么,这里发生的是,如果我键入:
全部
一切都好。但是当我输入这个:
H
它打印printhelp()的输出并立即打印未定义的命令消息。 现在,这必须与\ n charatcter,但我很难纠正它。
如果\n
被视为“有效输入”,只需将其添加到案例结构中:
case '\n':
break;
这将允许其他输入作为错误传递,但忽略换行符。
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;
}