Я хочу вычислить среднее число введенных пользователем чисел, при этом пользователь может ввести столько чисел, сколько захочет, т. е. цикл остановится только тогда, когда этого захочет пользователь.
Чтобы остановить цикл ввода пользователя, я попробовал это:
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;
}
Я много пытался решить эту проблему самостоятельно, но безуспешно. Я до сих пор не уверен, в чем конкретно моя вина. Пожалуйста, помогите мне это исправить.
Ваш терминал имеет строковую буферизацию, поэтому входной буфер содержит число и '\n'. scanf("%c", &reas)
прочитает новую строку. Измените строку формата, чтобы пропустить пробелы, добавив к строке формата префикс « »:
scanf(" %c", &res);
и пример запуска:
Enter number: 1
Continue? (Y/N)Y
Enter number: 2
Continue? (Y/N)N
1.500000
Вам следует проверить возвращаемое значение из scanf()
, иначе вы можете работать с неинициализированными переменными.
@Ruta Le, после того, как вы ввели число типа «32», какую следующую клавишу вы набрали? Был в Enter или
"Y"
?