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

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

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

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

30.12.2010, 16:31. Просмотров 469. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2010, 16:31     Работа с файломи...
Посмотрите здесь:

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

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

Работа с файломи - C++
1) Дан текстовый файл. Подсчитать количество знаков препинания (Х) и количество слов (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++
Всем добрый день! Сейчас изучаю Си/Си++ и вот внезапно надоело работать только с консолью. Хочется входные и выходные данные иметь в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1644 / 1272 / 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");
}
jallvar
0 / 0 / 0
Регистрация: 30.12.2010
Сообщений: 5
30.12.2010, 22:36  [ТС]     Работа с файломи... #3
Странно O-o
Когда я через визуал нажимаю происходит такое чуду..
А когда через каталог(вручную откр. exe ) Всё нормально ... С чем может быть связанно. Во всяком случае спасибо...
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,439
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.





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

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

А вообще вот, может пригодиться
Существует ли EOF или это миф?
jallvar
0 / 0 / 0
Регистрация: 30.12.2010
Сообщений: 5
31.12.2010, 21:26  [ТС]     Работа с файломи... #7
Спасибо.. Kravam
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2011, 01:45     Работа с файломи...
Еще ссылки по теме:

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

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


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

Или воспользуйтесь поиском по форуму:
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
01.01.2011, 01:45     Работа с файломи... #8
kravam
насчёт отсутствия символа eof похоже вы правы, соглашаюсь
Yandex
Объявления
01.01.2011, 01:45     Работа с файломи...
Ответ Создать тему
Опции темы

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