Как игнорировать символ '\ n' на входе - PullRequest
0 голосов
/ 08 января 2019

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

Я пытался разрешить его с помощью (case '\ n'), но это не сработало, и я попробовал несколько вариантов getchar (), но у меня возникла та же проблема.

    void main()
{
char nameA[100];
char nameB[100];
char command;
int height;
int quit = 1;

struct node *ring1 = NULL;
struct node *ring2 = NULL;

while(quit)
{
    printf("command? ");
    scanf("%c", %command, 1);

    switch (command)
    {
        case 'q':
            printf("bye\n");
            quit = 0;
            break;

        case 't':
            printf("name? ");
            scanf(" %[^\n]", nameA);
            printf("height? ");
            scanf(" %d", &height);

            ring1 = insert_tail(ring1, nameA, height);
            break;

        case '\n':
            break;

        default:
            break;
    }
}

}

Я хочу иметь возможность напечатать

Команда

команда? ...

Проблема в том, что если я использую "% c", я проигнорирую новую строку, и если я буду использовать "% c", результат будет выглядеть так:

команда?

команда? ...

но, скажем, в моем коде используется команда 't', результат будет выглядеть как

команда? т

имя? Everest

высота? 8848

команда? команда?

Как я могу это исправить? Я предполагаю, что проблема заключается в том, что я на самом деле ввожу два символа, «t» и «\ n», но я понятия не имею, как обойти это.

1 Ответ

0 голосов
/ 08 января 2019

Как игнорировать символ '\ n' на входе

После того, как все команды, кроме '\n', занимают оставшуюся часть строки.

В случае t причиной является проблема '\n' после введенного height. Поглотите его, прежде чем искать новую команду.

while(quit) {
    printf("command? ");
    scanf("%c", &command);
    switch (command) {
      ...
    }
    if (command != '\n') {
      int ch;
      while ((ch = getchar()) != `'\n'`) && (ch != EOF)) {
        ;
      }
    }
}

Совет: рассмотрите возможность использования fgets() для ввода данных пользователем и избегайте использования scanf().

...