Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бесконечность в цикле while, не могу понять 
V
    Опции темы
Kontaktnik
Дата 22.8.2012, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.8.2012

Репутация: нет
Всего: нет



Не судите строго за код.Я только начинаю разбираться с основами.У меня одна проблема, в цикле 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;
 }
PM MAIL   Вверх
Фантом
Дата 22.8.2012, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Так ведь counter нигде не вводится. Сначала он равен 0, потом на каждом шаге цикла увеличивается на единицу, соответственно, до значения -1 не добирается.
PM   Вверх
math64
Дата 22.8.2012, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Доберётся. Только ждать долго. Сначала от 0 доберётся до 0x7fffFFFF (это чуть больше 2000000000), затем столько же от -0x80000000 до -1.
Если используешь 16 разрядный компилятор, ждать поменьше  - от 0 до 32767 и от -32768 до -1.
PM   Вверх
borisbn
Дата 22.8.2012, 08:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(math64 @  22.8.2012,  08:08 Найти цитируемый пост)
Доберётся. 

 smile 
Цитата(Kontaktnik @  22.8.2012,  01:01 Найти цитируемый пост)
float total = 0, counter = 0;




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 22.8.2012, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Да, не заметил что float - тем более без подсветки синтаксиса. Kontaktnik, используй кнопку "Код"!
С таким счётчиком даже такой цикл
Код

float counter, delta;
for(counter = 10, delta = 0.1; counter != 0; counter -= delta) {
   printf("%g\n", (double)counter);
}

будет бесконечным  - из-за ошибок округления counter никогда не станет 0.

Добавлено через 2 минуты и 40 секунд
Кстати, total - тоже float, а печатается с помощью %d. Лажу напечатает.
PM   Вверх
Kontaktnik
Дата 23.8.2012, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.8.2012

Репутация: нет
Всего: нет



Код

#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(т.е. этого самого контр.значения)
Код

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

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

PM MAIL   Вверх
NadezdaT
Дата 23.8.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крылья



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 4.4.2012

Репутация: нет
Всего: нет



О_о...
Код

   printf("Введите расход бензина(-1 to end): \n");
   scanf("%d", &litr);
   if (litr != -1) {
      printf("Введи кол-во проеденных км: \n");
      scanf("%d", &km);
   }
   else {// здесь пишешь то что нужно....
   }


Это сообщение отредактировал(а) NadezdaT - 23.8.2012, 09:39
PM MAIL WWW   Вверх
Kontaktnik
Дата 23.8.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 22.8.2012

Репутация: нет
Всего: нет



Всем спасибо, разобрался
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0773 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.