• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Бесконечность Цикла While В Си

  • Автор темы Kontaktnik
  • Дата начала
K

Kontaktnik

Не судите строго за код.Я только начинаю разбираться с основами.У меня одна проблема, в цикле 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;
}
 
K

Kineziz

Конечно будет бесконечный цикл.

C++:
while (counter != -1)
{
itoglitr += litr;
itogkm += km;
a = (float) km / litr;
counter++;
printf("Для этой заправки использовано км/литр: %f/n", a);
}

Переменная counter увеличивается и никогда не будет отрицательным. Его надо или уменьшать или вводить с клавиатуры каждую итерацию цикла.

counter++; заменить на counter--;
 
K

Kontaktnik

с этим я немного разобрался.
C++:
#include <stdio.h>

main ()
{
float total = 0, itogkm = 0, itoglitr = 0;
int km, litr; 

printf("Введите расход бензина(-1 to end): \n");
scanf("%d", &litr);
printf("Введи кол-во проеденных км: \n");
scanf("%d", &km);

while (litr != -1) { 
itoglitr += litr;
itogkm += km;
total = (float) km / litr; 
litr++; /*здесь не очень понятно, в принципе мне не нужно не увеличивать, не уменьшать счётчик, кол-во вводов меня не интересует*/
printf("Для этой заправки использовано км/литр: %f\n", total); 
printf("Введите расход бензина(-1 to end): \n");
scanf("%d", &litr);
printf("Введи кол-во проеденных км: \n");
scanf("%d", &km);
}

total = itogkm / itoglitr; 
printf("Среднее число км/литров: %f\n", total);


return 0;
}
Как сделать так, чтобы при вводе -1(т.е. этого самого контр.значения)
C++:
printf("Введите расход бензина(-1 to end): \n");
scanf("%d", &litr);
printf("Введи кол-во проеденных км: \n");
scanf("%d", &km);
строка "Введи кол-во проеденных км: \n" не выводилась ? Т.е. если мы останавливаем цикл на вводе расхода бензина, вводить кол-во проеденных км не нужно.

Пробывал реализовать с помощью if/else, но никак не поддаётся.
Заранее благодарен
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!