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

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

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

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

27.10.2012, 23:00. Просмотров 2009. Ответов 10
Метки нет (Все метки)

Вечер добрый!

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

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++
Помогите написать программу которая считывает из файла такой структуры; 1 строка 5 7 2 строка ...

Построчное чтение из файла - C++
Помогите пожалуйста, не могу доделать программу, точнее я её сделала но не так как бы мне хотелось. Вот код программы(прога рабочая) ...

Построчное чтение файла - C++
Например есть структура struct Record { char * Name; char * LastName; int Age; }; и есть текстовый файл, например: ...

Построчное чтение из файла - C++
Помогите, не могу разобраться с построчным чтением с файла. Т.е. у меня есть текстовый файл в котором множество строк. Мне нежно прочитать...

Построчное чтение из файла - C++
такая проблема есть фаил в нем записана информация: 10 Петров А.Л. Сон 1991 4 51 Сидоров В.О. Луна 1970 5 ....... мне нужно считать...

Построчное чтение из файла в структуру - C++
Всем доброго дня! Есть структура вида struct Product { char code; char name; double price;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
28.10.2012, 00:20 #9
MrGrig, позволь узнать, откуда такие глубокие познания?) Даже я не знал что через feof можно читать из файла символы))
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 00:47 #10
Цитата Сообщение от Д-3210 Посмотреть сообщение
Вот только не соображу почему мой код выводил последнюю строку 2 раза?
В конце последнй строки в файле был нажат Enter. Точно не знаю, но предполагаю, что fgets() считывает последнюю строку, потом переходит к чтению следующей и только тогда встречает конец файла. После этого ничего не читает, поэтому, в вашем коде, второй раз выводилось старое содержимое line. Если '\n' из последней строки убрать, то и ваш код выведет последнюю строку один раз.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 10:18 #11
Цитата Сообщение от lazybiz Посмотреть сообщение
Даже я не знал что через feof можно читать из файла символы))
вы меня невнимательно слушаете, я не говорю что через feof считывать символы, я говорю что нужно считывать с файла символ а потом проверять его на feof и пытался таким образом продемонстрировать это, чтобы вы или кто либо иной наставил меня на путь истинный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 10:18
Привет! Вот еще темы с ответами:

Построчное чтение файла в стиле С++ - C++
Господа, передо мной стоит задача реализовать чтение из файла в стиле С++. Реализованно следующим способом: fstream f; ...

Построчное чтение файла в C++ Builder 6 - C++
Есть кусок кода консольного приложения, слова заносим в массив строк (писал в Dev C++) ifstream w("words.txt"); string wordBase; ...

Построчное чтение из текстового файла - C++
Подскажите плз, как считать не только первую строку, но и все последующие в файле? #include <string.h> #include <stdio.h> int...

Построчное чтение из текстового файла .txt - C++
Имеется текстовый файл fin.txt, в котором построчно записана информация подобным типом: Марка машины ; Модель ; Цвет ; Год выпуска ;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.10.2012, 10:18
Ответ Создать тему
Опции темы

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