Проблема с бесконечным циклом - PullRequest
2 голосов
/ 13 сентября 2011

У меня проблема.Этот код не дает результатов, которые он должен.Он должен выводить число на консоль и по какой-то причине игнорирует оператор if при этом.Кроме того, в этой программе InputNum должен оставаться с длинным типом данных.

#include <iostream>
#include <fstream>

using namespace std;

/*
Function Name: CalculateBinary
CalculateBinary takes a number from the main function and finds its binary form.
*/

void CalculateBinary(long InputNum)
{   
    //Takes InputNum and divides it down to "1" or "0" so that it can be put in binary form.
    if ( InputNum != 1 && InputNum != 0)
        CalculateBinary(InputNum/2);

    // If the number has no remainder it outputs a "0". Otherwise it outputs a "1". 
    if (InputNum % 2 == 0)
        cout << "0";
    else
        cout << "1";
}


void main()
{
    // Where the current number will be stored
    long InputNum = 3000000000;

    //Opens the text file and inputs first number into InputNum. 
//  ifstream fin("binin.txt");
//  fin >> InputNum;

    // While Input number is not 0 the loop will continue to evaluate, getting a new number each time.
    while (InputNum >= 0)
    {
        if(InputNum > 1000000000)
            cout << "Number too large for this program ....";
        else
            CalculateBinary(InputNum);

        cout << endl;
        //fin >> InputNum;      
    }
}

Ответы [ 4 ]

5 голосов
/ 13 сентября 2011

CalculateBinary(InputNum) НЕ изменяет значение InputNum, поэтому его значение всегда будет одинаковым (300000000), и цикл while никогда не завершится.

0 голосов
/ 13 сентября 2011

Похоже, вы ожидаете, что последнее число в файле будет меньше 0, чтобы завершить вашу программу. Вместо этого лучше определить конец файла. Попробуйте раскомментировать код файла и использовать вместо него условие while:

while (fin.good())
0 голосов
/ 13 сентября 2011

Да, это будет бесконечно.Это потому, что у вас есть строка:

while (InputNum >= 0)

в main, но вы никогда не меняете значение InputNum!

Удалите цикл while в целом.Похоже, вам это может понадобиться, когда вы начнете читать свои цифры с binin.txt, но, конечно, еще нет.

0 голосов
/ 13 сентября 2011

Оператор if не игнорируется;Вы просто не изменяете InputNum.Это всегда собирается сохранить свое первоначальное значение.Вы передаете InputNum по значению, а не по ссылке.Поэтому CalculateBinary() использует копию InputNum.

...