Невозможно вырваться из цикла "while" - C - PullRequest
1 голос
/ 30 января 2010

Я пытаюсь реализовать простой цикл while, чтобы пользователь мог вводить несколько отметок без перезагрузки приложения, по какой-то причине, независимо от того, что я ввел, оно всегда зацикливается.

Я посмотрел с помощью отладчика, и он, похоже, не принимает окончательный метод scanf (), спрашивающий, повторяться ли он сам или нет.

int mark = 0;
    char grade;
    char choice = 'y';

    while(choice == 'y')
    {
        //Request input
        printf("enter a mark: ");
        scanf("%d", &mark);

        //Assess mark
        grade = assess(mark);

        //Output result
        printf("That equals ");
        printf("%c", grade);
        printf(" when graded\n");

        //Repeat?
        printf("Again?...\n");
        fflush(stdin);
        scanf("&c", &choice);
    }

Я также попробовал сделать это с циклом do-while, но все еще не рад, есть идеи, где может быть проблема?

Ответы [ 4 ]

8 голосов
/ 30 января 2010

Как минимум две проблемы:

  fflush(stdin);

не определено - вы можете очищать только выходные потоки. И:

    scanf("&c", &choice);

должно быть:

    scanf("%c", &choice);
3 голосов
/ 30 января 2010

Я думаю, что последняя строка должна быть

scanf("%c", &choice);

вместо

scanf("&c", &choice);
1 голос
/ 30 января 2010

Попробуйте scanf("%c", &choice);.

Обратите внимание, что scanf возвращает количество совпадающих входов, поэтому вы должны действительно проверить возвращаемое значение. Если по какой-то причине входные данные не отображаются на символ, ваша переменная может быть неизменной. Перед вызовом scanf установите choice на что-то != 'y', чтобы продолжить, только если введен y.

1 голос
/ 30 января 2010

fflush() определяется только для выходных потоков. comp.lang.c FAQ не рекомендует использовать его для stdin.

Также, как отметили другие, используйте scanf("%c", &choice);, чтобы прочитать выбор.

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