Обработка пользовательского ввода в C - PullRequest
2 голосов
/ 14 февраля 2011

В C я пишу программу, которая принимает пользовательский ввод, а не сравнивает его, чтобы увидеть, какой вывод он должен использовать.Я нахожу это проблематичным и мне было интересно, может ли кто-нибудь помочь мне.Пока у меня есть:

while(cmd[0] != EOF){
     fgets(cmd, sizeof(cmd), stdin); /** Takes in user input and stores it in cmd **/
     if(cmd[0] == '\n')
         printf("%s> ", cwd);
     else if(strcmp(cmd, "ls") == 0)
         printf("I will list everything");
}

Есть идеи?По сути, он просто игнорирует любой пользовательский ввод, когда он есть.

PS Переменная cwd - это просто строка.

1 Ответ

3 голосов
/ 14 февраля 2011

Я думаю, вам нужно задать более конкретный вопрос. Я вижу пару проблем:

  1. Вызов strcmp(). fgets() сохранит перевод строки (если есть) из строки ввода. Учитывая, что ваша программа выглядит так, как будто она реализует оболочку командной строки, сравнение с "ls", вероятно, никогда не будет верным - вам нужно будет использовать strncmp() или включить \n в строку, с которой вы сравниваете. 1010 *

  2. Вы не проверяете статус возврата после вызова fgets() - вы, вероятно, захотите сделать это, чтобы избежать катастрофы, если кто-то введет в ваш запрос некоторые плохие контрольные символы.

  3. Как я упоминал выше, ваша программа выглядит как командная оболочка. Если это так, ваша подсказка ("%s> ", верно?) Будет распечатана, только если пользователь введет пустую строку в качестве ввода. Предположительно, вы хотите, чтобы подсказка выводилась каждый раз вокруг цикла.

  4. Как вы ожидаете, что cmd[0] будет когда-либо EOF для завершения вашего цикла? На справочной странице fgets() написано:

    После успешного завершения fgets() и gets() возвращают указатель на строку. Если конец файла возникает до того, как какие-либо символы прочитаны, они возвращают NULL и содержимое буфера остается неизменным.

    Мне кажется, что вы не можете получить EOF в своем буфере, используя fgets().

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