C仿真终端

时间:2014-12-12 06:34:03

标签: c linux

我正在尝试编写模拟用户输入终端的代码。 用户输入应包含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个单词组成时才能正常工作。如果没有发生任何事情,我只是得到一个空白。

有什么建议吗?

2 个答案:

答案 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
}

使用这种方法,您可以使用任意数量的参数处理命令。