Остановка цикла while на основе пользовательского ввода

Я хочу вычислить среднее число введенных пользователем чисел, при этом пользователь может ввести столько чисел, сколько захочет, т. е. цикл остановится только тогда, когда этого захочет пользователь.

Чтобы остановить цикл ввода пользователя, я попробовал это:

while (true)
{
    /* code here */
    printf("\nContinue? (Y/N)");
    char res;
    scanf("%c", &res);
    if (res == 'N') {
        break;
    }
}

Я ожидаю такой вывод:

Enter number: 32
Continue? (Y/N) Y
Enter number: 78
Continue? (Y/N) N
55.0000

Но я получаю этот вывод:

Enter number: 32
Continue? (Y/N)
Enter number: 78
Continue? (Y/N)
Enter number: N
Continue? (Y/N)
62.666668

Вот мой полный код:

#include <stdio.h>
#include <stdbool.h>
int main()
{
    int sum = 0;
    int count = 0;
    while (true) {
        printf("\nEnter number: ");
        int a;
        scanf("%d", &a);
        sum += a;
        count += 1;
        printf("\nContinue? (Y/N)");
        char res;
        scanf("%c", &res);
        if (res == 'N') {
            break;
        }
    }
    float avg = (sum*1.0)/count;
    printf("\n%f", avg);
    
    return 0;
}

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

🤔 А знаете ли вы, что...
C используется для создания множества приложений, включая игры, базы данных, браузеры и многое другое.


50
1

Ответ:

Решено

Ваш терминал имеет строковую буферизацию, поэтому входной буфер содержит число и '\n'. scanf("%c", &reas) прочитает новую строку. Измените строку формата, чтобы пропустить пробелы, добавив к строке формата префикс « »:

      scanf(" %c", &res);

и пример запуска:

Enter number: 1

Continue? (Y/N)Y

Enter number: 2

Continue? (Y/N)N

1.500000

Вам следует проверить возвращаемое значение из scanf(), иначе вы можете работать с неинициализированными переменными.