С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Ifstream и eof в нем - C++

28.05.2014, 21:15. Просмотров 1455. Ответов 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 вопрос: почему последний элемент функция вывела дважды?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 21:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ifstream и eof в нем (C++):

Нюансы условий достижения EOF в ifstream - C++
Есть файл in.txt из 2х строк следующего содержания: abcde 12345 Есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; int main()...

Различия ifstream::get() и ifstream::get(ch) - C++
Доброго времени суток. Была тут тема, в которой я не разобрался до конца. Код ниже проверяет баланс скобок в текстовом файле #include...

\n \0 EOF - C++
Добрый вечер, возник такой вопрос: зачем мы заменяем символ конца строки на нуль символ в данном коде (удаление символов содержащихся в s2...

ifstream - C++
Привет всем такая проблема ввода Student* s;// студенты s = new Student; ifstream fin(&quot;Student.txt&quot;); for(int i(0); i &lt; l;...

Не работает while (!***.eof() ! - C++
Здравствуйте, задание такое: Вводить с клавиатуры данные и записывать их в файл в виде Имя группа оценка Иванов ...

EOF K&R - C++
Всем доброго времени суток. Изучаю Си по Дейтелам, а теперь попала в руки книга авторов языка. Интересно теперь будет параллельно по двум...

9
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
28.05.2014, 21:21 #2
1.
Цитата Сообщение от Teddy Посмотреть сообщение
fin >> abc;
вводит одну букву пропуская пробельные символы.
Если хотите читать все буквы, то используйте abc=fin.get();
2. последнее чтение было чтением конца файла. Оно не изменило содержимое ввода,
вот оно и повторяется дважды.
0
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:24  [ТС] #3
Объясните если не сложно как работает
C++
1
fin.eof()
он проверяет на конец файла элемент за указателем, на который переводит
C++
1
fin>>abc
?
и как избежать записи лишнего элемента?
0
nmcf
5699 / 5010 / 1712
Регистрация: 14.04.2014
Сообщений: 20,460
28.05.2014, 21:33 #4
eof() возвращает флаг конца файла. Флаг устанавливается функциями чтения, если они в процессе выборки символов доходят до конца.
0
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:35  [ТС] #5
Спасибо большое. Вроде понял
0
nmcf
5699 / 5010 / 1712
Регистрация: 14.04.2014
Сообщений: 20,460
28.05.2014, 21:37 #6
Проверяй fail() после 10-й строки. Этот флаг должен выставляться, если ничего прочитать не удалось.
0
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
28.05.2014, 21:51 #7
Проще делать так
C++
1
2
3
4
while( fin >> abc)
{
    fout << abc << endl;
}
0
Teddy
0 / 0 / 0
Регистрация: 28.05.2014
Сообщений: 7
28.05.2014, 21:52  [ТС] #8
он пробелы пропустит так. спасибо я уже разобрался
0
nmcf
5699 / 5010 / 1712
Регистрация: 14.04.2014
Сообщений: 20,460
28.05.2014, 22:22 #9
zss, а как это поможет? Экстрактор возвращает ссылку на поток. Или у меня документация какая-то другая?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.05.2014, 22:28 #10
nmcf, std::istream имеет operator bool (C++11) или operator void* (C++03), благодаря которому в условных инструкциях можно не делать явную проверку на fail и bad биты. http://www.cplusplus.com/reference/ios/ios/operator_bool/
0
28.05.2014, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2014, 22:28
Привет! Вот еще темы с ответами:

Int Eof - C++
Вот проблема есть массив int a заполнять его целыми числами последовательность завершается признаком конца ввода

fstream ifstream - C++
подключил библиотеку fstream создал объект ifstream file открыл файл, поработал(считывал до конца &lt; eof()) сделал file.close(); ...

ifstream считывает 0 - C++
Здравствуйте. Есть 2 текстовых файла с названиями n.in n.out .Содержимое входящего файла 1 5 2 4 3 9 4 7 5

Ifstream ошибка - C++
int main(int argc, char* argv) { setlocale(LC_ALL,&quot;Russian&quot;); // корректное отображение Кириллицы char buff; // буфер...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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