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

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

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

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

19.07.2015, 20:47. Просмотров 561. Ответов 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++
появилась необходимость выучить работу с файлами за 9 часов #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; #include...

Проблема при считывании из файла - C++
Пишу простенькую программу по криптографии. В результате шифрования получается txt файлик с набором закорючек(он во вложении). Для...

Переполнение при считывании из файла - C++
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void read_file(void) { int mass; FILE* file = fopen(&quot;arr.txt&quot;, &quot;r&quot;); ...

Разъясните ошибки при считывании файла - C++
не пойму что от меня требуется тут) пол года изучаем язык) часть ошибок исправил но при считывании с файла лепит нарушение прав доступа ...

При считывании из файла не выводится отчество - C++
Необходимо прочитать из файла фамилию студента, имя и отчество. И вывеси на экран фамилию и инициалы. Вот код, но выводит ерунду...

Ошибка при считывании двоичного файла - C++
При считывании из .EXE файла возникает ошибка, а возникает она когда считываемый байт равен 0x1A. Если он есть в файле то программа &quot;видит&quot;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 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
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 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
2092 / 1599 / 306
Регистрация: 15.12.2013
Сообщений: 6,427
19.07.2015, 21:17     При считывании из файла последний элемент читается дважды #4
Цитата Сообщение от Kapex Посмотреть сообщение
Как так? Где я обманываюсь?
Вы считаете что оба кода эквивалентны,это не так.Во втором случае,после прочтения последней строки, в infile eof не будет установлен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2015, 08:14     При считывании из файла последний элемент читается дважды
Еще ссылки по теме:

Ошибка, при считывании инфы с файла... - C++
Вот есть код:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;fstream.h&gt; #include &lt;stdio.h&gt; #include...

Сбивается указатель при считывании из файла - C++
Сбивается указатель, считывается не то значение (вместо '1' считывается пробел и всё летит). Но если открыть этот файл в WordPad'e добавить...

Лишние биты при считывании файла - C++
Нужно порциями по 63 байта считать текст из файла. &quot;in&quot; - мой открытый файл для чтения. Вот отрывок из кода fseek(in, 0, SEEK_END); ...

Переполнение строки при считывании из файла - C++
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на R, то я записываю её в другой файл. Примерно на 312000-й...

Конец файла при потоковом считывании - C++
if (fin.eof()==0){ cout &lt;&lt; &quot;aaa&quot;; int asa; asa = (int)buf; fout.write((char*)buf, sizeof(buf - asa)); } вот...

Неверная кодировка при считывании из файла - C++
Проблема такая, при считывание из файла идет кракозябра, как это исправитьsetlocale(LC_ALL, &quot;rus&quot;); FILE *fp; if(!(fp =...


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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1807 / 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