2013-04-09 3 views
1

Я написал эту программу для класса, который запрашивает положительное число и на основе числа вычислений. На прошлой неделе у меня была отличная помощь со стороны сотрудников штатов, но мой профессор попросил меня переписать его и упростить мой код. Я сделал это, и теперь математика не выходит правильно. Я запустил отладчик, но я не вижу, где переданные значения неверны. Кроме того, все числа не выполняют тест «if (number> 0)».Возможная ошибка операции, случайный вывод с одной цифрой

Это может быть ошибка компиляции, хотя я получаю сообщение об успешном построении?

Заранее благодарен!

Вот код.

#include <iostream> 
#include <string> 
#include <fstream> 
#include <iomanip> 
#include <stdexcept> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 
    system ("color F0"); 

    int number, countIf = 0, countWhile = 0, countDo = -1, h = 0, i = 0, x = 0, y = 0; 
    char repeat = 'y'; 

    do { 

     cout << "Please enter a positive integer or zero to quit: "; 
     cin >> number; 
     x = number, y = number; 
     cin.ignore(); 

     if (number < 0) 
      cout << "Error: The integer entered was either not positive or a zero.\n" << endl; 

     else if (number > 0) 
     { 
      if (number%2 == 0 && number%5 == 0) 
       for (y%5; countIf <= y; countIf +=5) 
        { 
         i = y/10; 
         i += countIf; 
         cout << countIf << " "; 
        } 

      else if 
       (countWhile < x && number%2 == 0) 
        { 
         countWhile += 2; 
         cout << countWhile << " "; 
        } 

      else 
       { 
        countDo +=2; 
        cout << countDo << " "; 
       } 
     } 

      cout << "\n\nDo you wish to continue? (Y or N): "; 
      cin >> repeat; 
} 
     while (number != 0 && repeat == 'y' || repeat == 'Y'); 



    //cout << "\nThanks for playing!" << endl; 
    system ("pause"); 
    return 0; 


} 

Вывод должен быть похож на:

enter image description here

Что я получаю:

enter image description here

+0

Когда вы упрощаете код, вы должны протестировать его на каждом шагу. Таким образом, если он перестанет работать, вы точно узнаете, в чем проблема. – Beta

+0

Это не ошибка компиляции, это логическая ошибка. Попробуйте использовать пример с карандашом и бумагой. Кстати, '&&' имеет более высокий приоритет, чем '||', поэтому 'A && B || C' означает '(A && B) || C'. – MRAB

+1

Ваш код довольно длинный. Сделайте копию и начните удалять части, пока вы больше не сможете воспроизвести проблему, или пока не получите «простейший возможный» фрагмент кода, который все еще имеет проблему. В этом последнем случае вы можете вернуться и предоставить этот фрагмент кода, и я гарантирую, что вам будет легче ответить. – nneonneo

ответ

2

Я изменил код так:

 else if 
      (countWhile < x && number%2 == 0) 
       { 
        for(countWhile+=2; countWhile<x; countWhile+=2) 
         cout << countWhile << " "; 
       } 

     else 
      { 
        for(countDo+=2; countDo<x; countDo+=2) 
         cout << countDo << " "; 
      } 

И я получаю выход, как:

Please enter a positive integer or zero to quit: 82 
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 

Do you wish to continue? (Y or N): y 
Please enter a positive integer or zero to quit: 75 
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 

Надеется, что это помогает.

Смежные вопросы