• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Бесконечность Цикла 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, но никак не поддаётся.
Заранее благодарен
 
Мы в соцсетях:

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