C ++ Почему мой цикл do-while не завершается, как только выполняется логическое условие?

Мой текущий проект требует программы, использующей цикл do-while и отдельную функцию создания значений. Программа запрашивает неопределенное количество входных данных до тех пор, пока разница между двумя последними введенными числами не станет больше 12. Код работает, но только когда он кажется очевидным. Иногда он распознает, что bool был выполнен немедленно и завершается, в других случаях я могу ввести 15+ чисел, пока он не закончится, даже если он вообще заканчивается. Я хотел бы, чтобы мой код был таким же, как сейчас, если это возможно. Я знаю, что мне нужно предварительное условие, поскольку с первым входом сравнивать нечего, и сейчас я пытаюсь это выяснить.

Это мой код до сих пор:

bool TwelveApart(int x, int y);

int main()
{
int num1, num2;
cout << "Enter some integers: " << endl;

do
{
cin >> num1 >> num2;
TwelveApart(num1, num2);
} while (TwelveApart(num1, num2) == false);
cout << "The difference between " << num1 << " and " << num2 << " is greater than or equal to 12." << endl;

return 0;
}
bool TwelveApart(int x, int y)
{
if (abs(x - y >= 12))
{
return true;
}
else
{
return false;
}
}

-1

Решение

Условное в

if (abs(x - y >= 12))

не правильно настроен. Это должно быть:

if (abs(x - y) >= 12 )

FWIW, вы можете упростить функцию до:

bool TwelveApart(int x, int y)
{
return (abs(x - y) >= 12 );
}

Кроме того, у вас есть избыточный вызов TwelveApart в do-while петля. Этот звонок не делает ничего полезного. Цикл может быть:

do
{
cin >> num1 >> num2;
} while (TwelveApart(num1, num2) == false);
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]