#c #loops
Вопрос:
Я столкнулся с некоторой проблемой во время программирования. Я хочу написать программу для различения четных чисел, нечетных чисел, нулевых значений и отрицательных чисел с помощью цикла while и for. 1-й вопрос : Однако, когда я попытаюсь запустить свою программу, последний введенный мной номер не будет засчитан. Я знаю, что это происходит из-за того, что мой o помещен в начало условия if, как я должен решить свою проблему? 2-й вопрос : Для частей цикла for на самом деле он может игнорировать эти отрицательные значения. Как я должен решить эту проблему, чтобы отрицательные числа также учитывались в цикле ? Могу я изменить числоgt;0 на число gt;
#includelt;iostreamgt; using namespace std; #includelt;iostreamgt; using namespace std; int main () { int num ,numbers = 1 ; char answer = 'Y' ; int o=0, e=0, z=0 ,n=0 ; // o for odd numbers, e for even numbers, z for zero values, n for negative numbers cout lt;lt; "Enter number" lt;lt; numbers lt;lt; ": " lt;lt; endl ; cin gt;gt; num ; for ( num = num ; num gt;0; num ) while (answer == 'y' || answer == 'Y') { if (num % 2 == 0 amp;amp; num gt; 0) { e ; coutlt;lt; "The number of even numbers is :" lt;lt; e lt;lt; endl; numbers ; coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ; cin gt;gt; num ; coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ; cingt;gt; answer ; } else if (num % 2 == 1 amp;amp; num gt; 0) { o ; coutlt;lt; "The number of odd numbers is :" lt;lt; o lt;lt; endl; numbers ; coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ; cin gt;gt; num; coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ; cingt;gt; answer ; } else if (num == 0) { z ; coutlt;lt; "The total of 0 is :" lt;lt; z lt;lt; endl; numbers ; coutlt;lt;"Please enter number" lt;lt; numbers lt;lt; endl ; cin gt;gt; num; coutlt;lt;"If you wish to continue, Please enter y or Y to continue this program : "lt;lt; endl ; cingt;gt; answer ; } } cout lt;lt; "The total even numbers is :" lt;lt; e lt;lt; endl; cout lt;lt; "The total odd numbers is :" lt;lt; o lt;lt; endl ; cout lt;lt; "The total negative numbers is :" lt;lt; n lt;lt; endl ; cout lt;lt; "The total zero number is:" lt;lt; z lt;lt; endl; return 0; }
Комментарии:
1. Чтобы обрабатывать отрицательные числа, вам нужно написать некоторый код для обработки отрицательных чисел. У вас есть два обработчика для положительных чисел и один для нуля.
Ответ №1:
Эта строка в main() действительно озадачивает:
// ... for ( num = num ; num gt;0; num ) while (answer == 'y' || answer == 'Y')
Оператор for(;;) является вашим основным циклом. Оператор while будет выполняться до тех пор, пока num является положительным.
Давайте подробно рассмотрим это утверждение для() :
for (num = num; // num = num ??? this statement does nothing. num gt; 0; // the while statement (and the contents of the whule() loop block) // will only execute if num is gt; 0. num) // if num was gt; 0 then this loop will run until num overflows...
Удаление оператора for(;;) значительно улучшит работу вашей программы.
Ответ №2:
Ваш o
не имеет к этому никакого отношения.
(Возможно, вы были настолько убеждены в том, что это проблема, что вам не пришло в голову искать ее в другом месте. Это случается со всеми.)
Проблема в том, что ваша последовательность такова:
- Проверьте последний введенный номер и распечатайте результат
- Попросите пользователя ввести номер, но ничего с ним не делайте
- Спросите пользователя, хотят ли они продолжить
- Если они хотят продолжить, повторите пункт 1
- Если они этого не сделают, перестаньте считать
И поскольку вы прекращаете подсчет, если пользователь не хочет продолжать, последнее число, похоже, исчезло. Исправление этого оставлено в качестве упражнения.
(Подумайте более тщательно о том, в каком порядке вам нужно что-то делать.)
Обработка отрицательных чисел требует, чтобы вы написали для этого некоторый код — вы обрабатываете два случая положительных чисел и один для нуля, но вы, должно быть, забыли о негативах.
Исправление этого также оставлено в качестве упражнения.