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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Шаблоны проектирования http://www.cyberforum.ru/cpp-beginners/thread222715.html
Шаблоны проектирования, их реализация на С++. Кто знает какие-то хорошие книги, поделитесь :)
C++ Сортировка строк есть матрица. нужно отсортировать ее по сторокам. Т.е. строки должны идти в порядке возрастания. Сравниваем строки по первому элементу. если первые элементы равны, значит вторые и т.д. http://www.cyberforum.ru/cpp-beginners/thread222704.html
C++ Массив натуральных чисел
Ребят, ну помогите, пожалуйста с программкой. Упорядочить массив натуральных чисел по неубыванию следующим способом: 1. сначала числа сортируются по последней цифре 2. затем числа сортируются по предпоследней цифре 3. т.д. Подсчитать количество умножений, делений, и перестановок элементов массива.
C++ Строки, надо решить
через пол часа идти к преподу...сказал одну задачу сделаю-зачет поставит.... вот задача сама : (С++) В заданной строке символы стоящие на четных позициях заменить строкой "000"
C++ Создать динамическую записную книжку, используя структуру http://www.cyberforum.ru/cpp-beginners/thread222690.html
Создать динамическую записную книжку, используя структуру struct book{ char name; char phone; book *next; };
C++ Подсчёт количества знаков препинания в строке Здравствуйте. Помогите пожалуйста написать простейший алгоритм подсчёта количества знаков препинания в строке. C#. Заранее спасибо подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
31.12.2010, 15:23     Работа с файломи...
Не то. ВАши коды не сработают если файл будет пуст.
Вот заключительный вариант
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.





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