Бесконечный цикл 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;
  }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с printf и scanf
  2. Объявляем переменные: total (для подсчета расхода), km и litr (для ввода данных пользователем), a (не используется), itogkm и itoglitr (для хранения общего расхода и количества км), counter (для подсчета количества заправок)
  3. Выводим приглашение для ввода данных и считываем их с помощью scanf
  4. Запускаем цикл while, который будет выполняться до тех пор, пока пользователь не введет расход -1 литр
  5. Внутри цикла суммируем общий расход и количество км, увеличиваем счетчик заправок
  6. Выводим среднее значение расхода на заправке
  7. После окончания цикла вычисляем среднее значение расхода на все заправки и выводим его на экран
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.667 из 5