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

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

Войти
Регистрация
Восстановить пароль
 
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
#1

Ifstream и eof в нем - C++

28.05.2014, 21:15. Просмотров 903. Ответов 9
Метки нет (Все метки)

Имеется код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
    char abc;
    ofstream fout("ofstream training.txt"); /// открываем текстовый документ
    ifstream fin("ifstream training.txt");
 
    do
    {
    fin >> abc;
    fout << abc << endl;
    }
    while(!fin.eof());
        fin.close();
    fout.close();
    return 0;
}
на входном файле у меня "бла бла бла 123"
на выходном функция записывает:
б
л
а
б
л
а
б
л
а
1
2
3
3






1 вопрос: что стало с пробелами?
2 вопрос: почему последний элемент функция вывела дважды?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 21:15     Ifstream и eof в нем
Посмотрите здесь:

Объект ifstream!!! C++
C++ Объект ifstream!!!
C++ fstream ifstream
C++ ifstream
ifstream ofstream C++
C++ \n \0 EOF
ifstream считывает 0 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6117 / 5720 / 1850
Регистрация: 18.12.2011
Сообщений: 14,620
Завершенные тесты: 1
28.05.2014, 21:21     Ifstream и eof в нем #2
1.
Цитата Сообщение от Teddy Посмотреть сообщение
fin >> abc;
вводит одну букву пропуская пробельные символы.
Если хотите читать все буквы, то используйте abc=fin.get();
2. последнее чтение было чтением конца файла. Оно не изменило содержимое ввода,
вот оно и повторяется дважды.
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:24  [ТС]     Ifstream и eof в нем #3
Объясните если не сложно как работает
C++
1
fin.eof()
он проверяет на конец файла элемент за указателем, на который переводит
C++
1
fin>>abc
?
и как избежать записи лишнего элемента?
nmcf
4490 / 3828 / 1290
Регистрация: 14.04.2014
Сообщений: 15,034
28.05.2014, 21:33     Ifstream и eof в нем #4
eof() возвращает флаг конца файла. Флаг устанавливается функциями чтения, если они в процессе выборки символов доходят до конца.
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:35  [ТС]     Ifstream и eof в нем #5
Спасибо большое. Вроде понял
nmcf
4490 / 3828 / 1290
Регистрация: 14.04.2014
Сообщений: 15,034
28.05.2014, 21:37     Ifstream и eof в нем #6
Проверяй fail() после 10-й строки. Этот флаг должен выставляться, если ничего прочитать не удалось.
zss
Модератор
Эксперт С++
 Аватар для zss
6117 / 5720 / 1850
Регистрация: 18.12.2011
Сообщений: 14,620
Завершенные тесты: 1
28.05.2014, 21:51     Ifstream и eof в нем #7
Проще делать так
C++
1
2
3
4
while( fin >> abc)
{
    fout << abc << endl;
}
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:52  [ТС]     Ifstream и eof в нем #8
он пробелы пропустит так. спасибо я уже разобрался
nmcf
4490 / 3828 / 1290
Регистрация: 14.04.2014
Сообщений: 15,034
28.05.2014, 22:22     Ifstream и eof в нем #9
zss, а как это поможет? Экстрактор возвращает ссылку на поток. Или у меня документация какая-то другая?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2014, 22:28     Ifstream и eof в нем
Еще ссылки по теме:

C++ Нюансы условий достижения EOF в ifstream
Ifstream ошибка C++
не работает в ifstream C++
Различия ifstream::get() и ifstream::get(ch) C++
Unget and ifstream C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.05.2014, 22:28     Ifstream и eof в нем #10
nmcf, std::istream имеет operator bool (C++11) или operator void* (C++03), благодаря которому в условных инструкциях можно не делать явную проверку на fail и bad биты. http://www.cplusplus.com/reference/i...operator_bool/
Yandex
Объявления
28.05.2014, 22:28     Ifstream и eof в нем
Ответ Создать тему
Опции темы

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