Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2012, 06:32   #1
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию Файловый ввод-вывод.

Изучаю C++, необходимо разобраться с файловым вводом-выводом. В результате выполнения этой программы должно выводиться содержимое файла file1.txt (путь указан верно, в файле - строка числовых значений, разделенных пробелами). К сожалению, программа не выводит ничего. В чем ошибка?
Код:
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main() {
ifstream ifs1("C:\buisness\cpp\file1.txt");
string s;
ifs1.seekg(0);
for (int i=0;i<ifs1.eof();i++)
s += ifs1.get();
ifs1.close();
cout << s;
}
Я немного дополнил код и вывел проверку на открытие файла.

Код:
if (!ifs1) cerr << "Невозможно обратиться к файлу!" << endl;
Ошибку он все-таки выдает. Почему?

Переместив файл в корневую папку, нашел еще одну ошибку - в цикле.

Код:
for (int i=0;i<ifs1.eof();i++)
s += ifs1.get();
Он не понимает "ifs1.eof()". При вводе знаения, скажем, 255, содержимое файла выводит.
Если поставить вместо этого "ifs1.end", он считывает до первого пробела.
Как тогда обозначить конец файла?

Понял. Обозначаем вот так :

Код:
while (!ifs1.eof())
s += ifs1.get();
Вопрос по поводу пути к файлу остался открытым...
Никто

мой блог

Последний раз редактировалось three_cats; 28.09.2012 в 07:05.
three_cats вне форума Ответить с цитированием
Старый 28.09.2012, 07:10   #2
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Разобрался. Вот код. Проблема пути к файлу решается заменой обратных слешей на обычные. Правда, почему-то в конце выводится какой-то символ "я", откуда он взялся?

Код:
#include <iostream>
#include <fstream>
#include <string>
#include <locale>

using namespace std;

void main() {

setlocale(LC_ALL,"Russian");

string name = "c:/buisness/cpp/file1.txt";
ifstream ifs1(name.c_str());
if (!ifs1) cerr << "Невозможно обратиться к файлу!" << endl;
string s = "";
ifs1.seekg(0);
while (!ifs1.eof())
s += ifs1.get();
ifs1.close();
cout << s;
}
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 30.09.2012, 11:16   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Обратные слэши - это тоже хорошо, но вообще для добавления в си-строки слэша используется эскейп-последовательность \\. Про \n помните? Погуглите про нее и поймете, почему у вас не работает. Правильный вариант такой:
Код:
ifstream ifs1("C:\\buisness\\cpp\\file1.txt");
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.09.2012, 19:12   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от three_cats Посмотреть сообщение
Правда, почему-то в конце выводится какой-то символ "я", откуда он взялся?
Когда достигнут конец файла, ifs1.get() возвращает значение std::char_traits<char>::eof(), которое выводится как "я". А флаг eof устанавливается только после попытки чтения в конце файла.
Somebody вне форума Ответить с цитированием
Старый 01.10.2012, 09:39   #5
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Я понял. "\" - это управляющий символ и его надо экранировать другим "\".
Никто

мой блог
three_cats вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файловый ввод-вывод vovik4385 Общие вопросы C/C++ 4 29.03.2012 18:22
Файловый ввод\вывод ВаликАматор Общие вопросы C/C++ 0 27.02.2011 11:08
Файловый ввод-вывод Кристюня Общие вопросы C/C++ 9 29.11.2010 20:02
Файловый ввод-вывод Оля_1991 Помощь студентам 0 10.10.2010 14:12
Файловый ввод/вывод -=$V=- Общие вопросы C/C++ 8 13.12.2008 21:11