我正在尝试编写模拟用户输入终端的代码。 用户输入应包含3个命令,如果所有命令都存在,则打印它们,否则打印错误信息。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc , char *argv[])
{
char command[1000], variable[1000], value[1000];
while(1)
{
printf("root@superstars:~# ");
scanf("%s" , command);
if (strcmp(command, "") != 0){
scanf(" %s" , variable);
if (strcmp(variable, "") != 0){
scanf(" %s" , value);
if (strcmp(value, "") != 0){
printf("%s %s %s\n", command, variable, value);
} else { printf("Command incorrect\n"); }
} else { printf("Command incorrect\n"); }
} else { printf("Command incorrect\n"); }
}
}
但问题是只有在命令正确且由3个单词组成时才能正常工作。如果没有发生任何事情,我只是得到一个空白。
有什么建议吗?
答案 0 :(得分:0)
我会使用sscanf函数来实现这一目标。所以它会是这样的:
char input[3000];
int arg;
fgets(input, 3000, stdin);
arg = sscanf(input, "%s %s %s", command, variable, value);
if(arg != 3)
printf("Command incorrect\n");
else
printf("%s %s %s\n", command, variable, value);
答案 1 :(得分:0)
scanf
在输入结束时返回EOF
因此,使用循环读取直到流的结尾
char args[100][20];
int i =0;
while(scanf("%s",args[i++])!=EOF);
if(i!=3)
{
//fail
}
使用这种方法,您可以使用任意数量的参数处理命令。