Задать вопрос
@gliese581d
Учусь

Почему первый цикл запускается повторно?

Подскажите пожалуйста, в чем может быть проблема, логически вроде все верно, но программа не работает так, как нужно. Вместо того, чтобы обработать блок за блоком, она повторяет цикл несколько раз, причем не работает условие <9, при вводе цифры 9, вместо того, чтобы перейти к следующей команде, она повторяет ее заново.
~/ $ ./population
set starting population size: 9 (должна была перейти к след. команде)
number should be equal or greater than 9: 9
set ending population size: 9 (должна была перейти к след. команде)
number should be equal or greater than starting population size: 9
set starting population size: 9
number should be equal or greater than 9: 9 - конец


исходный код:

#include <cs50.h>
  #include <stdio.h>

int start_int();
int end_int();

int main (void)


{
  
  int i = start_int();
  int j = end_int();
}


//prompt the user for a starting population size
int start_int(void)
{
int y;

 do
 {
     y = get_int("set starting population size: ");

}
 while ((y=get_int("number should be equal or greater than 9: "))<9);
    return y;

}


//prompt the user for an ending population size
int end_int(void)
{
int x;
 do
 {
   x = get_int("set ending population size: ");

}
 while ((x=get_int("number should be equal or greater than starting population size: "))<start_int());
    return x;

}


Как выяснил, частично была проблема в повторном вызове фунцкции get_int в
while ((x=get_int("number should be equal or greater than starting population size: "))<start_int());
и while ((у=get_int("number should ...;

Если удалить эту часть, то программа работает исправно, за исключением повторного исполнения первого цикла do while. Однако в таком виде она не выводит комментарий в случае неправильного введенного числа, если printf поставить до return, то в таком случае, комментарий выводится всегда, не смотря на условия. Если же после команды return, то не выводится никогда.

#include <cs50.h>
  #include <stdio.h>

int start_int();
int end_int();

int main (void)


{

  int i = start_int();
  int j = end_int();
}


//prompt the user for a starting population size
int start_int(void)
{
int y;

 do
 {
     y = get_int("set starting population size: ");

}
 while (y<9);
    return y;

}


//prompt the user for an ending population size
int end_int(void)
{
int x;
 do
 {
   x = get_int("set ending population size: ");

}
 while (x<start_int());
    return x;


}


~/ $ ./population
set starting population size: 9
set ending population size: 9
set starting population size: 9(не должно быть)
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@res2001
Developer, ex-admin
Если удалить эту часть, то программа работает исправно, за исключением повторного исполнения первого цикла do while.

Вы же сами повторно вызываете start_int() в предложении while, отсюда и повторный вызов.
Вам нужно передать в end_int() сохраненный результат выполнения start_int. И в while сравнивать с ним, не вызывая start_int повторно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы