准确读入一两个字符串

时间:2011-04-30 01:57:39

标签: c string input

我有一个程序接受来自命令行的输入。虽然所有可用命令都是一个字符串,但是有几个命令需要辅助字符串来进一步定义操作。

e.g。 “end”是一个命令,“add foo”是第二个命令。

我的代码处理2个字符串输入正常,但是当我尝试访问单个字符串命令(例如“end”)时,程序会等待更多输入而不是立即执行。

有没有什么方法可以让程序只读一行(最多可以有两个字符串)而不是现在的方式?

以下是目前的实施方式:

while(1)
    {
        scanf("%s%s", commandString,floorPath);

            if(!strcmp(commandString,"end") return;
            //I've got several of these as an "if / else", but there's no
            //need to reprint them here.

    }

3 个答案:

答案 0 :(得分:3)

单独读取第一个字符串,并根据输入决定是否需要读取另一个字符串。

while(1)
{
    scanf("%s", commandString);
    if (requiresAnotherString(commandString))
    {
         scanf("%s", floorPath);
         // handle two string command
    }
    else
    {
         // handle one string command
    }
}

答案 1 :(得分:1)

MByD说了什么,或者说,读取一行,然后单独从scanf()解析您读入的行,看看它是单字命令还是双字命令并采取适当的操作。

答案 2 :(得分:0)

这是另一种选择:

int cmdFromStdin (char **cmd) {
    int count = 0, nBytes = 0;
    char *word, inline[BUFSIZ];

    if (nBytes = getline (inline, BUSIZ, STDIN)) < 0)
        return nBytes;
    for (word = strtok (inline, " ") ; word != NULL ; 
                    word = strtok (NULL, " "))
        cmd[count++] = word;
    return count;
}

我用C编码已经有一段时间,但我记得有过scanf的问题(所以我以前使用过getline())。 strtok函数将解析出字符串,返回时您可以检查成功并处理数组cmd。我相信你必须包含stdio.h,stdlib.h和string.h。我的C有点生疏,所以请原谅语法错误。