Читайте ровно одну или две строки - PullRequest
0 голосов
/ 30 апреля 2011

У меня есть программа, которая принимает ввод из командной строки.Хотя все доступные команды являются одной строкой, для нескольких команд требуется дополнительная строка для дальнейшего определения действия.

например, «конец» - это одна команда, а «добавить 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 ]

3 голосов
/ 30 апреля 2011

Прочитайте только первую строку и, в зависимости от ввода, решите, нужно ли читать другую строку или нет.

while(1)
{
    scanf("%s", commandString);
    if (requiresAnotherString(commandString))
    {
         scanf("%s", floorPath);
         // handle two string command
    }
    else
    {
         // handle one string command
    }
}
1 голос
/ 30 апреля 2011

Что сказал MByD, или, альтернативно, прочитайте одну строку, а затем отдельно от scanf() проанализируйте строку, в которой вы прочитали, и посмотрите, является ли это командой из одного слова или команды из двух слов, и выполните соответствующие действия. *

0 голосов
/ 30 апреля 2011

Вот альтернатива:

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 немного ржавый, поэтому, пожалуйста, извините за синтаксические ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...