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

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

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

Работа с файломи... - C++

30.12.2010, 16:31. Просмотров 476. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
 
ifstream f("file.txt");
while (true)
{
    int v;
    f >> v;
    if(!f .eof())
        cout << v << endl;
    else
        break;
}
system("pause");
return 0;
}
file.txt
1
2
3
4
5
6
7
8
9
10
При запуске программы бесконечно в одну колонку выдает следуйщие число..
-858993460
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2010, 16:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файломи... (C++):

Работа с файломи - C++
Здравствуйте. Нужна программа которая бы делала следующее. У нас есть неопределенное количество файлов. Пользователь с помощью стандартного...

Работа с файломи - C++
1) Дан текстовый файл. Подсчитать количество знаков препинания (Х) и количество слов (Y) Если выполняется условие Y / X &lt;= 6 , то...

Работа с файломи - C++
Дан текстовый файл. Подсчитать количество знаков препинания (Х) и количество слов (Y) Если выполняется условие Y / X &lt;= 6 , то...

Потоки.Работа с файломи.Очередь.Стек. - C++
Полностью рабочий код с очередью.#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; #include &lt;tchar.h&gt; ...

Ошибка в C++, рабта с файломи - C++
(*файлами) Когда я компилирую программу мне выдает ошибку. (Ошибку из терминала вставить не могу, она слишком большая по объему) Код:...

Изучение работы с файломи .txt - C++
Всем добрый день! Сейчас изучаю Си/Си++ и вот внезапно надоело работать только с консолью. Хочется входные и выходные данные иметь в...

7
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
30.12.2010, 16:50 #2
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include<conio.h>
using namespace std;
 
int main()
{
    ifstream f("file.txt");
    if(!f){cerr<<"file not found"; getch();return 0;} 
    int v;
    while (true){
        f >> v;
        if(!f .eof()) cout<<v<<" "<<endl;
        else break;
    }
    system("pause");
}
0
jallvar
0 / 0 / 0
Регистрация: 30.12.2010
Сообщений: 5
30.12.2010, 22:36  [ТС] #3
Странно O-o
Когда я через визуал нажимаю происходит такое чуду..
А когда через каталог(вручную откр. exe ) Всё нормально ... С чем может быть связанно. Во всяком случае спасибо...
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
31.12.2010, 15:23 #4
Не то. ВАши коды не сработают если файл будет пуст.
Вот заключительный вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
 
        ifstream f("file.txt");
        if(!f){cerr<<"file not found"; getchar();return 0;} 
        int v;
while (true)
{
        f >> v;
        if (!f.fail())
         cout << v << endl;
        else
         break;
}
system("pause");
return 0;
}
Добавлено через 15 часов 5 минут
Кстати, варианты
igorrr37,
jallvar,
неправильны ещё и вот по какой причине. Дело в том, что f.eof() возвращает true, когда активен eofbit (то ли флаг какой-то, то ли ещё что) А он, в свою очередь становится активным, КОГДА ИЗ ФАЙЛА СЧИТЫВАТЬ БОЛЬШЕ НЕЧЕГО.

Разберём подробнее.

Допустим,есть текстовый файл 1 2 3 4 5 6 7 8 9

Причём очень важно то, как вы его создали. Пусть он создан просто вручную записыванием цифр в файл, по введении числа 9 файл сохранён.
Произойдёт следующее: считается число 9, активируется eofbit (ведь считывать из файла больше нечего), f.eof вернёт истину, сработает break и цикл прервётся, а число 9 НЕ НАПЕЧАТАЕТСЯ.

Вот поэтому и не надо такой код использовать
C++
1
2
                f >> v;
                if(!f .eof()) cout<<v<<" "<<endl;
Хотя если вдруг создавая текстовый файл после 9-ки вы что нибудь напишите, например пробелы или переведёте
каретку на другую строку, тогда после считывания 9-ки файл НЕ БУДЕТ ПУСТ и следовательно 9-ка напечатается.

Ну вот, можно сказать что поэтому цитируемыый вариант то работает, то не работает

ВАриант с испльзованием f.fail () более надёжен потому, что
возвращает истину, если в предыдущем считывании была ошибка, только и всего.
При считывании последнего числа ошибки не будет и оно выведется.

А дальше будет ошибка, ведь число последнее (и не важно идут после него нечитаемые символы или нет),
а мы считываем в переменную типа int.





Это значит, что когда вы считаете
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
31.12.2010, 17:31 #5
девятка печатается даже если после неё ничего нет, а eofbit похоже устанавливается по результатам проведённой операции, т.е. после девятки стоит символ конца файла - 26 в аски кодах, и после его считывания eofbit и будет установлен
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
31.12.2010, 18:03 #6
Цитата Сообщение от igorrr37 Посмотреть сообщение
девятка печатается даже если после неё ничего нет
Цитата Сообщение от igorrr37 Посмотреть сообщение
т.е. после девятки стоит символ конца файла
Молодой человек, вы уж определитесь пожалуйста, есть у вас что-то после девятки или нет.

И что значит -26?
Я например сильно сомневаюсь что там после девятки есть что-то, соответствующее -26. Если это непечатаемый символ, берите hex- редактор, открывайте в нём файл и смотрите, что там за -26

А вообще вот, может пригодиться
Существует ли EOF или это миф?
0
jallvar
0 / 0 / 0
Регистрация: 30.12.2010
Сообщений: 5
31.12.2010, 21:26  [ТС] #7
Спасибо.. Kravam
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
01.01.2011, 01:45 #8
kravam
насчёт отсутствия символа eof похоже вы правы, соглашаюсь
0
01.01.2011, 01:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 01:45
Привет! Вот еще темы с ответами:

програма с текстовыми файломи - C++ Builder
требования 1 подготовить текстовый фаил с входными данными в редакторе 2 разбить программу на функции ввода обработки вывода 3...

ребята, не работает програмка с работай с файломи - C++ Builder
блин, пишу програмку, написал вроде, а она в простейшем месте ведет себя не как надо....в чем дело-ума не хватает...может кто поможет?? ...

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления - C#
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием - Visual C++
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...


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

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

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