从文件读取C ++数据有很大的差距?

时间:2013-12-03 06:05:53

标签: c++ file-io

我有一个包含Strings和Ints的文本文件,如下所示:

test1 1
test2 2
test3 3
test4 4
test5 5
test6 6

测试1-4在运行程序之前全部写入文本文件,而测试5和6通过writeHighScore()函数附加到文件中。在文本文件中,测试5和6看起来很完美,但是当我用readHighScore()将它们读回控制台时,在测试4和测试5之间有大量的换行符(大约10个)。有趣的是,测试5和测试6显示正确的间距:

test1 1
test2 2
test3 3
test4 4





test5 5
test6 6

以下是两个功能:

void writeHighScore(Player p)
{
    ofstream outputFile;
    outputFile.open("highscores.txt", ios::out | ios::app | ios::binary);
    if (outputFile.is_open())
    {
        outputFile << "\r" << endl << p.getName() << " " << p.getHealth() * 10;
    }
    else
    {
        cout << "\nError file not found!";
    }
    outputFile.close();
}

void readHighScores()
{
    string name;
    int score;
    ifstream inputFile;
    inputFile.open("highscores.txt");

    cout << "\n\n\nHIGH SCORES" << endl;
    cout << "-----------" << endl;  
    while(!inputFile.eof())
    {
        getline(inputFile, name, ' ');
        inputFile >> score;
        cout << name << "\t\t" << setw(3) << score << endl;
    }
    inputFile.close();  
}

谢谢!

2 个答案:

答案 0 :(得分:0)

test4 4之后很可能是空格和/或制表符,在打印时<< endl;交错<< endl;时每行占一行。删除<< "\r" << endl,您会看到输出中间有空格。

他们正在爬行,因为你在{{1}}中使用了换行符和回车符。

答案 1 :(得分:0)

endl\r在您的文件中添加了额外的换行符。尝试从outputFile声明中删除这些内容。