Цикл while игнорирует scanf второй раз - PullRequest
9 голосов
/ 28 ноября 2011
#include <stdio.h>

int main ()
{
    char loop='y';
    while(loop != 'n') {
        printf("loop? ");
        scanf("%c", &loop);
        if(loop != 'y') {
            loop='n';
        }
    }
    return 0;
}

Если я наберу 'y', он перезапустит цикл while, но проигнорирует сканирование во второй раз и завершит цикл после этого.Кто-нибудь может помочь?

Ответы [ 3 ]

15 голосов
/ 28 ноября 2011

Убедитесь, что scanf отбрасывает символ новой строки. Измените его на:

scanf(" %c", &loop);
       ^
10 голосов
/ 28 ноября 2011

Возможно, вам пришлось вводить новую строку, чтобы ввод шел в вашу программу, верно? Во второй раз, когда ваш цикл выполняет, он читает тот символ новой строки, который «ожидал» чтения, и автоматически выходит из цикла ('\n' != 'y'). Вы можете заставить scanf игнорировать пробелы, используя вместо этого строку формата:

" %c"
0 голосов
/ 07 августа 2017

Одним из решений может быть использование fflush(stdin) после оператора scanf() для очистки буфера ввода.

...