2015-08-21 3 views
2

Пользователя может использовать 2 команды:C: Чтение дополнительного входного сигнала от пульта

move black 

(или)

move 

Таким образом, 'черная' часть является необязательной.

Я знаю, что пользовательский ввод ограничен 50 символами, поэтому я могу использовать scanf() для чтения каждой строки.

Однако, я не могу использовать 3 раза scanf() как для второго варианта - будет ошибка (я думаю ..).

Есть функция, которая позволяет мне читать, и если нет ввода, она сообщит об этом?

Получает (или fgets) подходящий? (помните, что строка не более 50 символов).

+1

Здравствуйте. Почему бы не попытаться прочитать все 50 символов, а затем проанализировать строку результата? –

ответ

3

Используйте fgets(), чтобы взять все символы в качестве входных данных.

char * fgets (char * str, int num, FILE * stream); 

fgets() читает символы из stream и сохраняет их в виде строки C в str до (num-1) символы были считаны или либо перевод строки или конец файла-достигается, в зависимости от того произойдет первым.

Для лучшего понимания необходимо следовать программе:

#include<stdio.h> 
#include<string.h> 

int main() { 
    char string1[50]; 
    char string2[50]; 

    int res; 

    printf("String1:\t"); 
    fgets (string1, 50, stdin); // move black 

    printf("String2:\t"); 
    fgets (string2, 50, stdin); // move 

    res = strcmp(string1, string2); // move black with move 

    printf("strcmp(%sstring1,%sstring2) = %d\n",string1,string2,res); 
} 

Вход:

движение черный

движение

Выход:

String1: String2: зЬгстр (переместить черный строку1, двигаться string2) = 32

Надеется, что это поможет вам решить вашу проблему.

You can run live here.

2

Прочитайте всю команду от пользователя во временный буфер, используя fgets():

char * fgets (char * buffer, int num, FILE * stream); 

Теперь вы можете разметить вход для чтения с помощью strtok() функции:

char *strtok(char *string, const char *delimterTokens); 

Использование strcmp(), проверьте сравнение с назад.

2

Я не знаю, действительно ли я понимаю этот вопрос, но я бы сказал, что вам нужно только прочитать ввод с помощью функции scanf/gets/read, а затем разрезать ее с помощью пробела.

Для того, чтобы сделать это, вы могли бы использовать

char *strtok(char *str, const char *delim) (man page here)

вырезать строку, которую вы прочитали до и затем сравнить вторую строку с

int strcmp(const char *s1, const char *s2) (man page here)

Таким образом, пользователю не нужно будет вводить два раза.

Надеюсь, это вам поможет.

Смежные вопросы