0

在 C++ 中,我试图读取一个文件并将该文件中的字符串存储到程序中的字符串中。这很好用,直到我得到最后一个单词,它总是存储两次。

ifstream inputStream;
string next = "";
string allMsg = "";
inputStream.open(fileName.c_str());
string x;

while (!inputStream.eof())
{
    inputStream >> x;
    next = next + " " + x;
}
cout << "The entire message, unparsed, is: " << next << endl;

这样做会从我打开的文件中添加最后一个单词或 int 到下一个。有什么建议么?谢谢!

4

3 回答 3

3

这是因为当您读取最后一行时,它不会设置 eof 位和失败位,只有当您读取END时,才会设置 eof 位并eof()返回 true。

while (!inputStream.eof())  // at the eof, but eof() is still false
{
    inputStream >> x;  // this fails and you are using the last x
    next = next + " " + x;
}

将其更改为

while( inputStream >> x){
    // inputStream >> x;  dont call this again!
    next = next + " " + x;
}
于 2013-10-15T00:47:14.530 回答
0
while (!inputStream.eof())

应该

while (inputStream >> x)
于 2013-10-15T00:46:21.173 回答
-1

如果最后一次读取到达文件末尾,eof() 将返回 true,如果下一次读取到达文件末尾则不会。尝试:

ifstream inputStream;
string next = "";
string allMsg = "";
inputStream.open(fileName.c_str());
string x;

inputStream >> x;
if(!inputStream.eof()) {
    do {
        next = next + " " + x;
        inputStream >> x;
    } while (!inputStream.eof())
}
cout << "The entire message, unparsed, is: " << next << endl;
于 2013-10-15T00:46:38.607 回答