одно и то же слово добавлено дважды [копия]

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 из файла, который я открываю для следующего. Какие-либо предложения? Благодарю!

Теги:
file-io
eof

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;
}
  • 0
    Это не работает, потому что теперь он читает только каждое другое слово. Поэтому, если в файле указано «один два три четыре пять», теперь он сохраняет только «один три пять» в следующем.
  • 0
    Вы не вызываете inputStream >> x; внутри петли ...
0
while (!inputStream.eof())

Должно быть

while (inputStream >> x)
  • 0
    @ZacHowlandx Почему? ...
  • 0
    @ 0x499602D2 - на это уже много раз отвечали: stackoverflow.com/questions/5605125/…
-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;
  • 0
    Это не должно быть принятым ответом. Зак Вранглера точен и полон. Это просто неправильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню