Бесконечный цикл while при расчете расхода топлива - C (СИ)
Формулировка задачи:
Не судите строго за код.Я только начинаю разбираться с основами.У меня одна проблема, в цикле while, у меня постоянно возникает бесконечность повторения.Хочу чтобы мне обьяснили мою ошибку.Выполняю по одному готовому примеру свои задачи, но в примере вроде всё проходит, а вот в задачах возникает бесконечный цикл.Поясните пожалуйста самыми простыми словами.
Задача состоит в том, чтобы с помощью контрольного значения (-1), т.е. пока его не введут, выполнялся цикл для разных заправок например.Требуется вывести км/литры по каждой конкретной заправке, и среднее кол-во км/литров по 2-3-4 заправкам
#include <stdio.h> main () { float total = 0, counter = 0; int km, litr, a, itogkm, itoglitr; printf("Введите расход бензина(-1 to end): \n"); scanf("%d", &litr); printf("Введи кол-во проеденных км: \n"); scanf("%d", &km); while (counter != -1) { itoglitr += litr; itogkm += km; a = (float) km / litr; counter++; printf("Для этой заправки использовано км/литр: %f/n", a); } total = itogkm / itoglitr; printf("Среднее число км/литров: %d/n", total); return 0; }
Решение задачи: «Бесконечный цикл while при расчете расхода топлива»
textual
Листинг программы
#include <stdio.h> main () { float total = 0; // counter - количество бензоколонок не может быть 3.445 Верно? тогда переносим его в целочисленные значения int km, litr, a, itogkm, itoglitr, counter = 0; // переменная a тут вообще не нужна, во первых в твоем примере ты туда хочешь получить число с плавающей запятой что равно такому int = float в твоем примере, что не верно как сам видишь. Предлагаю убрать a, а не используемый в теле основного цикла float переменную под именем total использовать для подсчета среднего значения для одной бензоколонки. printf("Введите расход бензина(-1 to end): \n"); scanf("%d", &litr); printf("Введи кол-во проеденных км: \n"); scanf("%d", &km); while ( litr != -1) { // для твоей логики нудно осуществлять проверку введенного значения. А куда попадают введенные значения. Правильно в переменную litr и km. т.к. у тебя стоит предложение выйти в первом запросе на получение значения, значит будем проверять litr. itoglitr += litr; itogkm += km; -> убираем a = (float) km / litr; <- total = (float) km / litr; // такая операция корректна, ибо оба операнда равны по типу float = float по результату. counter++; printf("Для этой заправки использовано км/литр: %f/n", total); // тут выводим среднее значение total. } total = (float) itogkm / itoglitr; // itogkm и itogkm целочисленные операнды поэтому требуется приведение типа при делении для получения корректного результата ( добавили приведение типа результата в виде (float) printf("Среднее число км/литров: %d/n", total); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с printf и scanf
- Объявляем переменные: total (для подсчета расхода), km и litr (для ввода данных пользователем), a (не используется), itogkm и itoglitr (для хранения общего расхода и количества км), counter (для подсчета количества заправок)
- Выводим приглашение для ввода данных и считываем их с помощью scanf
- Запускаем цикл while, который будет выполняться до тех пор, пока пользователь не введет расход -1 литр
- Внутри цикла суммируем общий расход и количество км, увеличиваем счетчик заправок
- Выводим среднее значение расхода на заправке
- После окончания цикла вычисляем среднее значение расхода на все заправки и выводим его на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д