无限循环问题

时间:2011-09-13 05:01:08

标签: c++ recursion

我有问题。这段代码没有给出它应该得到的结果。它应该向控制台输出大数,并且由于某种原因它在执行此操作时忽略了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 个答案:

答案 0 :(得分:5)

CalculateBinary(InputNum)不会修改InputNum的值,因此它的值将始终相同(300000000),而while循环永远不会结束。

答案 1 :(得分:0)

if语句不被忽略;你只是没有修改InputNum。它始终保持其初始价值。您按值传递InputNum,而不是按引用传递。因此,CalculateBinary()正在使用InputNum

的副本

答案 2 :(得分:0)

是的,它将是无限的。那是因为你有一个:

while (InputNum >= 0)

main行,但你从不更改InputNum的值!

完全删除while循环。当你从binin.txt开始阅读你的数字时,你似乎可能需要它,但肯定还没有。

答案 3 :(得分:0)

看起来您希望文件中的最后一个数字小于0来终止您的程序。相反,最好检测文件的结尾。尝试取消注释文件代码并使用while条件:

while (fin.good())