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

Ifstream и eof в нем - C++

Восстановить пароль Регистрация
 
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:15     Ifstream и eof в нем #1
Имеется код:

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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 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
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
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
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
28.05.2014, 21:37     Ifstream и eof в нем #6
Проверяй fail() после 10-й строки. Этот флаг должен выставляться, если ничего прочитать не удалось.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 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
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
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++ \n \0 EOF
ifstream считывает 0 C++
C++ Нюансы условий достижения EOF в ifstream

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 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 в нем
Ответ Создать тему
Опции темы

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