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

Построчное чтение из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Д-3210
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 10
27.10.2012, 23:00     Построчное чтение из файла #1
Вечер добрый!

С с++ только знакомлюсь.
Нужно обработать файл.
Построчно считываю данные, и обрабатываю их.
Но вот ведь какая странность. Последняя строка считывается дважды

C++
1
2
3
4
5
file = fopen(file_name, "r");
while (!feof(file)){
 str = fgets(line, 1000, file);
 printf("%s\n", line);
}
что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 23:00     Построчное чтение из файла
Посмотрите здесь:

Построчное чтение из файла C++
Построчное чтение из файла C++
C++ Построчное чтение из файла
Построчное чтение файла C++
Построчное чтение файла в C++ Builder 6 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
27.10.2012, 23:05     Построчное чтение из файла #2
Она не считывается дважды, она остается в массиве.
Попробуй так:
C
1
2
3
while ( fgets( line, 1000, file ) ) {
    printf ...
}
Д-3210
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 10
27.10.2012, 23:22  [ТС]     Построчное чтение из файла #3
Спасибо! Все отлично)
Вот только не соображу почему мой код выводил последнюю строку 2 раза?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
27.10.2012, 23:24     Построчное чтение из файла #4
попробуйте так
C++
1
2
3
4
5
6
7
file = fopen(file_name, "r");
char buf;
while ((buf=feof(file))!=0){
 str = buf
 str+ = fgets(line, 1000, file);//это конечно если строка типа стринг или если строка чаровский массив но там эта операция переопределена
 printf("%s\n", line);
}
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
27.10.2012, 23:41     Построчное чтение из файла #5
MrGrig, я надеюсь, это была шутка?!
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 00:01     Построчное чтение из файла #6
Цитата Сообщение от lazybiz Посмотреть сообщение
MrGrig, я надеюсь, это была шутка?!
не то чтобы шутка, я если честно не помню как там должно происходить считывание и проверка одновременно... Не люблю советовать всякую шляпу но как то там было по другому, что символ считывается и если он не конец файла далее с ним продолжается работа... все время эту кострукцию забываю =с
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
28.10.2012, 00:05     Построчное чтение из файла #7
Да я не про считывание) Больше всего меня интересуют эти моменты:
(buf=feof(file))!=0
str = buf
str+ = fgets
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 00:09     Построчное чтение из файла #8
Цитата Сообщение от lazybiz Посмотреть сообщение
(buf=feof(file))!=0
этот момент и есть попытка реализации считывания в ячейку символа, и его проверка на конец файла
Цитата Сообщение от lazybiz Посмотреть сообщение
str = buf
str+ = fgets
ну а здесь опять же если сивол не конец файла записать его в строку и добавить оставшиеся символы
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
28.10.2012, 00:20     Построчное чтение из файла #9
MrGrig, позволь узнать, откуда такие глубокие познания?) Даже я не знал что через feof можно читать из файла символы))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 00:47     Построчное чтение из файла #10
Цитата Сообщение от Д-3210 Посмотреть сообщение
Вот только не соображу почему мой код выводил последнюю строку 2 раза?
В конце последнй строки в файле был нажат Enter. Точно не знаю, но предполагаю, что fgets() считывает последнюю строку, потом переходит к чтению следующей и только тогда встречает конец файла. После этого ничего не читает, поэтому, в вашем коде, второй раз выводилось старое содержимое line. Если '\n' из последней строки убрать, то и ваш код выведет последнюю строку один раз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 10:18     Построчное чтение из файла
Еще ссылки по теме:

C++ Построчное чтение из файла
Построчное чтение файла в стиле С++ C++
C++ Построчное чтение из файла в структуру

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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 10:18     Построчное чтение из файла #11
Цитата Сообщение от lazybiz Посмотреть сообщение
Даже я не знал что через feof можно читать из файла символы))
вы меня невнимательно слушаете, я не говорю что через feof считывать символы, я говорю что нужно считывать с файла символ а потом проверять его на feof и пытался таким образом продемонстрировать это, чтобы вы или кто либо иной наставил меня на путь истинный
Yandex
Объявления
28.10.2012, 10:18     Построчное чтение из файла
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru