由于while循环,程序无法正确读取文件?

时间:2014-12-15 21:40:30

标签: c++ while-loop ifstream readfile

我的程序运行正常,只是它正在文件末尾读取一个看似随机的七位数字,以便为文件添加一个额外的数字,我无法弄清楚原因。我能够确定它与第一个while()循环有关。

我已经尝试了所有我能想到的东西,我注意到的一件事是,当我将全局变量更改为我知道在文件(12)中的数字数量时,它将完美地工作。但是,我想这样做是因为我不确切知道文件中有多少个数字。

新文件中的输出假设看起来像是多少但有额外的数字: 8 10 12 17 25 36 47 62 62 65 87 89 2972880 //然而,这个最后的七位数字并不存在...这里是代码......

#include <iostream>
#include <fstream>

using namespace std;

const int SIZE = 256;

int main(void)
{
    int getNumbers[SIZE];
    ofstream outFile;
    ifstream inFile;
    bool success;
    int count = 0,
        total = 0,
        add = 1;
    int num;

    inFile.open("numbers.txt");

    if (inFile.is_open())
    {
        cout << "File successfully read." << endl;
    }

    while (count < (total + add) && !inFile.eof())
    {
        inFile >> getNumbers[count];
        total += add;
        count++;
    }

    int grandTotal = (total - 1);

    do
    {
        success = false;
        for (int i = 0; i < grandTotal; i++)
        {
            if (getNumbers[i] > getNumbers[i + 1])
            {
                num = getNumbers[i];
                getNumbers[i] = getNumbers[i + 1];
                getNumbers[i + 1] = num;
                success = true;
            }
        }
        grandTotal--;

    } while (success);

    inFile.close();

    outFile.open("sorted.txt");

    if (outFile.is_open())
    {
        cout << "File successfully opened." << endl;
    }

    int index = 0;
    while (index < total)
    {
        outFile << getNumbers[index]
                << " \n";
        index++;
    }

    outFile.close();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

正如@Galik所指出的,你不应该在循环条件下检查eof(),因为它总是会在最后给你一个垃圾数据点。将读取移动到循环条件。

while (count < (total + add) && inFile >> getNumbers[count]) 
{
    total += add;
    count++;
}