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

Изучение работы с файломи .txt - C++

Восстановить пароль Регистрация
 
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
10.10.2012, 22:43     Изучение работы с файломи .txt #1
Всем добрый день!
Сейчас изучаю Си/Си++ и вот внезапно надоело работать только с консолью. Хочется входные и выходные данные иметь в файликах .txt. Все бы хорошо, но пристойных мануалов, как это делать, так и не нашла. Обычно либо дают какие-то куски кода с кучей непонятно откуда взятых слов/функций, либо целые фрагменты кода, которые, однако, при компиляции в VS 2012 выдают ошибку.
Просто мечтаю о внятной статье или главе из книги, объясняющей по шагам, как в VS прикрутить работу с блокнотными файлами. Подскажете что-нибудь?
А, еще часто встречаю следующие конструкции: "слово::слово" и "слово.слово". Подскажите, что это, зачем нужно, и где про это почитать доступно. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 22:43     Изучение работы с файломи .txt
Посмотрите здесь:

C++ Создание файлов a.txt, b.txt...z.txt
Работа с файломи C++
Работа с файломи... C++
изучение с++ C++
Работа с файломи C++
C++ Работа с файломи
Потоки.Работа с файломи.Очередь.Стек. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.10.2012, 22:49     Изучение работы с файломи .txt #2
Литература C++
там достаточно много хороших книжек.
Даже не знаю, стоит ли отвечать на ваши вопросы про "слово::слово" и "слово.слово" - боюсь слишком запутать. Об этом обычно пишут в начале самоучителей.

Для работы с файлами надо подключить библиотеку fstream
затем создать необходимый объект - std::ifstream, std::ofstream или std::fstream
открыть нужный файл с помощью метода open(file_name)
далее можно записывать туда данные и считывать их обратно с помощью операторов << и >>. Будто бы вы работаете с cin/cout
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 14:19     Изучение работы с файломи .txt #3
Цитата Сообщение от Detweeted Посмотреть сообщение
Сейчас изучаю Си/Си++
Каким образом изучаете? Наберите в поисковике: потоковый ввод вывод с++ и читайте. Информации в инете полно. Вот здесь, для начала, очень просто объясняется: http://informatics.mccme.ru/moodle/m...iew.php?id=579
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
11.10.2012, 21:02  [ТС]     Изучение работы с файломи .txt #4
Спасибо за пояснения! Изучаю по гуглу/конспектам первого курса и по паре книжек.

А чем freopen отличается от fopen? Они относятся к разным пространствам имен?
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
11.10.2012, 21:05     Изучение работы с файломи .txt #5
http://lord-n.narod.ru/download/book...13/freopen.htm
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 21:19     Изучение работы с файломи .txt #6
Цитата Сообщение от Detweeted Посмотреть сообщение
и по паре книжек.
По каким?
Цитата Сообщение от Detweeted Посмотреть сообщение
А чем freopen отличается от fopen?
freopen связывает существующий поток с другим файлом.
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
11.10.2012, 21:29  [ТС]     Изучение работы с файломи .txt #7
Цитата Сообщение от alsav22 Посмотреть сообщение
По каким?
Керниган, Ритчи - базовая часть, Девис (для чайников) - объектно ориентированные штучки.

Цитата Сообщение от Петррр Посмотреть сообщение
Спасибо, сейчас буду разбираться.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 22:08     Изучение работы с файломи .txt #8
Цитата Сообщение от Detweeted Посмотреть сообщение
Керниган, Ритчи - базовая часть
Там есть глава: "Ввод и вывод".
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
11.10.2012, 22:19  [ТС]     Изучение работы с файломи .txt #9
Для теста наугад написала код, а он работает почему-то не для строк, а для слов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//равны ли строки?
 
#define N 20
 
#include <iostream>
#include <string>
#include <stdio.h>
 
 
using namespace std;
 
int main()
{
     freopen ("input.txt","r",stdin);
     freopen ("output.txt","w",stdout);
     char s1[N], s2[N];
     cin >> s1 >> s2;
     if (strcmp(s1, s2))
         cout << "не равны";
     else
         cout << "равны";
     return 0; 
}
Если в файле input оставить два слова, разделенные пробелом, то каждое слово будет восприниматься как строка. Почему так? Ведь строка должна заканчиваться символом /0, а пробел не то же самое, что /0?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.10.2012, 23:09     Изучение работы с файломи .txt #10
cin >> читает до пробела. Если хотите чтение строки, то используйте функции для строкового ввода.

Добавлено через 3 минуты
У вас смесь С и С++. Если испоьзуете iostream, тогда уж используйте и fstream. Если string, то зачем char[]. Читайте в string и сравнивайте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
     fstream f("input.txt");
     
     string s1, s2;
     getline(getline(f, s1), s2);
     f.close();
 
     f.open("output.txt", ios::out);
     if (s1 != s2)
         f << "не равны";
     else
         f << "равны";
 
     f.close();
 
     cin.get();
     return 0; 
}
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
12.10.2012, 20:13  [ТС]     Изучение работы с файломи .txt #11
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
     getline(getline(f, s1), s2);
Вот это что-то очень подозрительное. Смотрим описание getline: Getline возвращает 1, если запись существует, 0 - если найден конец файла и -1, если появляется ошибка. В качестве аргументов у getline должны быть название строки и лимит символов в строке.
Тут полное несоответствие. И рекурсия непонятно зачем. Поясните?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.10.2012, 22:00     Изучение работы с файломи .txt #12
Цитата Сообщение от Detweeted Посмотреть сообщение
Вот это что-то очень подозрительное. Смотрим описание getline: Getline возвращает 1, если запись существует, 0 - если найден конец файла и -1, если появляется ошибка. В качестве аргументов у getline должны быть название строки и лимит символов в строке.
Тут полное несоответствие. И рекурсия непонятно зачем. Поясните?
Где такое нашли? Есть методы getline() (члены класса istream). Они вызываются объектами класса. Например, cin.getline(char*, int, char = '\n'). А это просто шаблонная функция. Здесь почитатайте: http://www.cplusplus.com/reference/string/getline/ Рекурсии здесь нет.
Эта getline() возвращает поток, т.е. в данном случае: f. Можно написать то же самое, но понятнее:
C++
1
2
getline(f, s1);
getline(f, s2);
Detweeted
1 / 1 / 0
Регистрация: 10.10.2012
Сообщений: 21
14.10.2012, 16:02  [ТС]     Изучение работы с файломи .txt #13
А существует возможность начать запись в файл в main(), потом в самом main() вызвать некую функцию, в ней продолжить дозапись файла, потом вернуть в main() и записывать дальше? Какие аргументы мы должны передавать в функцию?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 17:35     Изучение работы с файломи .txt
Еще ссылки по теме:

C++ Дан одномерный массив из n (n≤104) элементов, осортировать его по возрастанию методом выбора через input.txt, output.txt
C++ Изучение C++
C++ Изучение С++
Изучение С++ C++
Вырезание строк из 1.txt, номера строк находятся в 2.txt C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 17:35     Изучение работы с файломи .txt #14
Цитата Сообщение от Detweeted Посмотреть сообщение
Какие аргументы мы должны передавать в функцию?
Поток по ссылке. Например, шесть строк в файле:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void func(fstream &f, string &s1, string &s2) // чтение двух строк из файла
{
    getline(getline(f, s1), s2);
}
 
int main()
{
     fstream f("1.txt");
     
     string s1, s2;
     getline(getline(f, s1), s2); // чтение двух строк из файла
     
     func(f, s1, s2);
     cout << s1 << endl << s2 << endl;
     
     getline(getline(f, s1), s2); // чтение двух строк из файла
 
     cout << s1 << endl << s2 << endl;
 
     f.close();
 
     cin.get();
     return 0; 
}
Yandex
Объявления
14.10.2012, 17:35     Изучение работы с файломи .txt
Ответ Создать тему
Опции темы

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