Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
1

Проблема с вводом-выводом из файлов

19.08.2011, 18:24. Просмотров 1638. Ответов 21
Метки нет (Все метки)

Только изучаю данную тематику, и нарвался на подобное - при попытке компилить, находит одну ошибку, и начинает ругаться..
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
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
 
using namespace std ;
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *buf_in , *buf_out ;
        
        if((*buf_in = fopen("D:\Учеба\Прогр\open_file\ole.txt" , "r")) == 0 )
        {cout << "Ошибка открытия входного файла" ; return 1; }
 
        if((*buf_out = fopen("D:\Учеба\Прогр\open_file\okay.txt" , "w")) == 0 )
        { cout << "Ошибка открытия выходного файла"; return 1 ; }
        
    int dlina = 0;
    char mass[50] , mass1[50];
 
    fread (&mass , sizeof(mass) , 1 , buf_in ) ;
 
    while(mass[dlina] != ' ' )
    {
        mass1[dlina] = mass[dlina] ;
        dlina++ ;
    }
 
    *(mass1 + dlina) = "Friend" ;
 
    fclose(buf_in) ;
 
    fwrite( &mass1 , sizeof(mass1) , 1 , buf_out ) ;
 
    fclose(buf_out) ;
 
    return 0;
}
При этом в указ. папке находится файл с таким содержанием: Hi 2 all ! =)

Помогите советом, что в проге не так, а то самообучение - зло, но необходимое зло )
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2011, 18:24
Ответы с готовыми решениями:

День недели дня рождения. Проблема с вводом-выводом
Всем привет! В общем, написал я это чудо, вижу &quot;Введите год&quot;, ввожу, но ввод не останавливается по...

Трабл с вводом/выводом
Вот есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ ...

Управление вводом-выводом
Помогите решить задачу. Пусть два процесса осуществляют доступ к одному и тому же файлу, но один...

Помощь с потоковым вводом-выводом.
Доброго времени суток. можно ли как-нибудь создать/открыть файл для чтения и добавления с помощью ...

Таблица с вводом и выводом. Ошибки. C++
Доброго всем вечера! Делал вот такую таблицу с вводом и выводом из книжки обучения для C++...

21
nameless
Эксперт С++
340 / 304 / 36
Регистрация: 16.06.2009
Сообщений: 486
19.08.2011, 18:29 2
Цитата Сообщение от DoZZer_ Посмотреть сообщение
if((*buf_in = fopen("D:\Учеба\Прогр\open_file\ole.txt" , "r")) == 0 )
Цитата Сообщение от DoZZer_ Посмотреть сообщение
if((*buf_out = fopen("D:\Учеба\Прогр\open_file\okay.txt" , "w")) == 0 )
Зачем указатель разыменовываете?
1
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
19.08.2011, 18:42  [ТС] 3
Да уж, с этим начудил ) Другой вопрос - как таким образом создать новый файл с надписью "Привет", которую берем из первого текстовика (до первого пробела) и добавить в конце, к примеру, строку ", Друг" ? Код покамест такой
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
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
 
using namespace std ;
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
        FILE *buf_in , *buf_out ;
                
                if((buf_in = fopen("D:\Учеба\Прогр\open_file\ole.txt" , "r")) == 0 )
                {cout << "Ошибка открытия входного файла" ; return 1; }
 
                if((buf_out = fopen("D:\Учеба\Прогр\open_file\okay.txt" , "w")) == 0 )
                { cout << "Ошибка открытия выходного файла"; return 1 ; }
                
        int dlina = 0;
        char mass[50] , mass1[50];
 
        fread (&mass , sizeof(mass) , 1 , buf_in ) ;
 
        while(mass[dlina] != ' ' )
        {
                mass1[dlina] = mass[dlina] ;
                dlina++ ;
        }
 
  
 
        fclose(buf_in) ;
 
        fwrite( &mass1 , sizeof(mass1) , 1 , buf_out ) ;
 
        fclose(buf_out) ;
 
        return 0;
}
0
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 20:48 4
Цитата Сообщение от DoZZer_ Посмотреть сообщение
Да уж, с этим начудил ) Другой вопрос - как таким образом создать новый файл с надписью "Привет", которую берем из первого текстовика (до первого пробела) и добавить в конце, к примеру, строку ", Друг" ?
Используйте другие функции:
fgets(), fscanf(), fputs(), fprintf() и т.д. для этого случая, если вы уж функции языка Си используете
0
19.08.2011, 20:48
-=ЮрА=-
Заблокирован
Автор FAQ
19.08.2011, 20:57 5
Цитата Сообщение от DoZZer_ Посмотреть сообщение
ругой вопрос - как таким образом создать новый файл с надписью "Привет", которую берем из первого текстовика (до первого пробела) и добавить в конце, к примеру, строку ", Друг" ?
- выложи свои текстовики D:\Учеба\Прогр\open_file\ole.txt и D:\Учеба\Прогр\open_file\okay.txt
А так же поясни задание - я понял так:
В первом фале содержится текст, нам нужно 1-е слово из 1-го файла(как понимаю - это "Привет"), и это слово будет именем 2-го текстовика, в который мы должны перенести текст из 1-го и дописать в конце слово "Друг"???
0
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 20:59 6
Задача очень проста и нам лучше подсказать и направить на верный путь, а не делать все самим, человек понять должен, тем более он хочет понять
0
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
19.08.2011, 21:04  [ТС] 7
Olga_, вы несомненно правы ) Пример создал из головы, интересна работа с потоками ввода-вывода, с файлами работа вообще не заладилась, учебник уже выносит мозг )


-=ЮрА=-, эти текстовики уже находятся в данной директории, а содержание их - "Hi 2 all ! =)" (или любая другая запись) в ole.txt и чистый текстовик okay.txt .
0
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
19.08.2011, 21:08  [ТС] 8
Вот текстовик ole.txt
0
Вложения
Тип файла: txt ole.txt (13 байт, 13 просмотров)
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 21:09 9
так можно считать очередное слово из файла f (разделенное символами ' ', '\t', '\n'):
C
1
2
char s[500];
fscanf(f, "%s", s);
А так это слово записать в другой файл g:
C
1
fprintf(g, "%s", s);
1
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
19.08.2011, 21:57  [ТС] 10
Olga_, а какие функции из С++ идентичны данным? Ведь, насколько я понимаю, это форматированный ввод, а хотелось бы посмотреть на потоки.. Планирую работать не со словами, а со строками. Прошу помощи
0
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 22:00 11
Цитата Сообщение от DoZZer_ Посмотреть сообщение
Olga_, а какие функции из С++ идентичны данным?
cout, cin,
getline()
1
asics
Freelance
Эксперт С++
2866 / 1801 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
19.08.2011, 22:02 12
Цитата Сообщение от Olga_ Посмотреть сообщение
cout, cin
Это не функции
1
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 22:03 13
Цитата Сообщение от asics Посмотреть сообщение
Это не функции
Это понятно и ежику Имелось ввиду если перенаправить поток.

<<, >>
1
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
20.08.2011, 00:04  [ТС] 14
cin >>
cout << - как потоки используются только с клавиатурой (для вывода строки) или как-то еще?

З.Ы.: Когда наши ежики научатся программировать на C, я пойду собирать яблоки с грибами и бегать на четвереньках по лесу )))
0
Olga_
846 / 188 / 18
Регистрация: 01.08.2011
Сообщений: 502
20.08.2011, 07:37 15
Цитата Сообщение от DoZZer_ Посмотреть сообщение
cin >>
cout << - как потоки используются только с клавиатурой (для вывода строки) или как-то еще?
Не только с клавиатурой эти потоки связаны. Можно перенаправить поток. Например, вы хотите в файл a.txt записать слово "Hello world". Тогда

C++
1
2
freopen("a.txt", "w", stdout);
cout << "Hello world";
Также можно перенправить входной поток. Например, вы хотите из текстового файла b.txt считать цело число. Тогда

C++
1
2
3
int x;
freopen("b.txt", "r", stdin);
cin >> x;
1
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
20.08.2011, 23:25  [ТС] 16
Огромное спасибо за ответы )
0
kazak
3070 / 2391 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
Завершенные тесты: 1
21.08.2011, 07:19 17

Не по теме:

Хм... почему никого не смутила эта строка?


Цитата Сообщение от DoZZer_ Посмотреть сообщение
"D:\Учеба\Прогр\open_file\ole.txt"
0
DoZZer_
11 / 11 / 1
Регистрация: 09.08.2011
Сообщений: 53
21.08.2011, 12:15  [ТС] 18
kazak, а чем она должна смущать? Русские символы?
0
grizlik78
Эксперт С++
2115 / 1555 / 230
Регистрация: 29.05.2011
Сообщений: 3,233
21.08.2011, 12:21 19
DoZZer_, русские символы это второе. Главное — это одинарные обратные слэши.
2
kazak
3070 / 2391 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
Завершенные тесты: 1
21.08.2011, 12:25 20
Обратная косая - специальный символ в С\С++ для обозначения так называемых эскейп (управляющих) последовательностей (\n, \t, \0, \", и т.д.). Для обозначения обратной косой именно как символа в тексте используется две черты \\
1
21.08.2011, 12:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 12:25

Помогите разобраться с потоковым вводом/выводом в С++
как решить эти две задачи: 24.1 Для класса Т1, имеющего два целочисленных компонентных данных а и...

Проблемы с вводом/выводом кирилицы в консоли
Прога осуществляет поиск строки по маске. как сделать чтобы программа принимала русские символы,...

Задача по массиву с вводом и выводом файл
Есть задание, суть такова, что нужна программа, которая читает файл, в котором задан размер...


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

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

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