Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kapex
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 121
#1

При считывании из файла последний элемент читается дважды - C++

19.07.2015, 20:47. Просмотров 536. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток!

Нашёл граблю. Считываю из файла слова, разделённые пробелами, в vector<string>. Для куска кода, которые по моему разумению должны работать одинаково, выдают разный ответ.
Кусок 1:
C++ (Qt)
1
2
3
4
string temp;
vector<string> a;
while (infile >> temp)
         a.push_back(temp);
Выдаёт правильный ответ

Код 2:
C++ (Qt)
1
2
3
4
5
6
string temp;
vector<string> a;
while (!infile.eof()){
         infile >> temp;
         a.push_back(temp);
}
Выдаёт на 1 больше, причём повторяет последний элемент.

Как так? Где я обманываюсь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 20:47     При считывании из файла последний элемент читается дважды
Посмотрите здесь:
При чтении файла последний элемент повторяется дважды C++
Проблема при считывании из файла C++
C++ Переполнение при считывании из файла
Разъясните ошибки при считывании файла C++
При считывании из файла не выводится отчество C++
C++ Ошибка при считывании двоичного файла
Ошибка, при считывании инфы с файла... C++
С++ сбивается указатель при считывании из файла C++
C++ Лишние биты при считывании файла
C++ Переполнение строки при считывании из файла
Конец файла при потоковом считывании C++
Неверная кодировка при считывании из файла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
19.07.2015, 21:12     При считывании из файла последний элемент читается дважды #2
C++
1
2
3
4
5
string temp;
vector<string> a;
while (infile >> temp){
         a.push_back(temp);
}
zss
Модератор
Эксперт С++
6280 / 5883 / 1904
Регистрация: 18.12.2011
Сообщений: 15,082
Завершенные тесты: 1
19.07.2015, 21:17     При считывании из файла последний элемент читается дважды #3
Во втором случае
infile >> temp;
последний раз читает за концом файла.
Однако в этот момент проверки нет и
a.push_back(temp);
запихивает еще раз последний элемент.
Правильней будет так
C++
1
2
3
4
5
6
7
8
9
string temp;
vector<string> a;
while (true)
{
   infile >> temp;
   if(!infile)
       break;
   a.push_back(temp);
}
S_el
2088 / 1595 / 305
Регистрация: 15.12.2013
Сообщений: 6,418
19.07.2015, 21:17     При считывании из файла последний элемент читается дважды #4
Цитата Сообщение от Kapex Посмотреть сообщение
Как так? Где я обманываюсь?
Вы считаете что оба кода эквивалентны,это не так.Во втором случае,после прочтения последней строки, в infile eof не будет установлен.
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
20.07.2015, 08:14     При считывании из файла последний элемент читается дважды #5
Цитата Сообщение от zss Посмотреть сообщение
Правильней будет так
Или так:
C++
1
2
3
4
5
6
string temp;
vector<string> a;
if(infile >> temp)
    do {
        a.push_back(temp);
    } while (infile >> temp);
Yandex
Объявления
20.07.2015, 08:14     При считывании из файла последний элемент читается дважды
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru