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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 11:19   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию работа с файлами

Код:
#include <conio.h>
#include <stdio.h>
#include <locale.h> 
#include <string.h>

int main()
{
    setlocale(LC_ALL,"Rus");
    char name[200];
    char str[100];
printf("\n Введите имя файла: ");   //спрашиваешь имя
gets(name);       //считываешь имя
FILE *f = fopen(name,"r");
if (f == NULL)
      {
		printf("Error in open.\n"); 
      }
fprintf(f,"%c\n",name);
for(int i = 0; i < 200; i++)
        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')
        {
                str[i] = 'd'; 
                str[i+1] = 'e'; 
                str[i+2] = 'f';
        }
fscanf(f,"%c\n",str);
fclose(f);
getch() ;
}
Вообщем программа меняет в тексте определенное словосочетание букв.

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

Последний раз редактировалось a.n.o.n.i.m; 31.05.2011 в 19:08.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.05.2011, 16:47   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

fopen()
fscanf()
fprintf()
fclose()
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 31.05.2011, 18:47   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

написал начало ввод имени файла,но если пишу не верное то пишет ошибку так и должно быть,но если правильно то пустой экран текста нет в программе,хотя в файле он есть

Код:
#include <conio.h>
#include <stdio.h>
#include <locale.h> 
#include <string.h>

int main()
{
    setlocale(LC_ALL,"Rus");
    char name[200];
    char str[100];
printf("\n Введите имя файла: ");   //спрашиваешь имя
gets(name);       //считываешь имя
FILE *f = fopen(name,"r");
if (f == NULL)
      {
		printf("Error in open.\n"); 
      }
fprintf(f,"%c\n",name);
for(int i = 0; i < 20; i++)
        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')
        {
                str[i] = 'd'; 
                str[i+1] = 'e'; 
                str[i+2] = 'f';
        }
fprintf(f,"%c\n",str);
fclose(f);
getch() ;
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.05.2011, 18:54   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
fprintf(f,"%c\n",name);
Ты пытаешься записать в файл, открытый в режиме чтения...
Наверное, надо fscanf?
И потом -- не вижу инициализации массива str[]. Может быть, именно туда ты и собирался считывать из файла?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 31.05.2011, 19:04   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Цитата:
не вижу инициализации массива str[]
Надо делать массив?Программа ведь только должна в строке менять определенные буквы

обновил первый пост

Последний раз редактировалось a.n.o.n.i.m; 31.05.2011 в 19:08.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.05.2011, 19:18   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Надо делать массив?Программа ведь только должна в строке менять определенные буквы

обновил первый пост
Ты все перепутал.
fprintf -- пишет в файл,
fscanf -- читает из файла.

Массив не надо "делать".
Ты его объявил, затем в цикле проводишь сравнение его элементов.
Но элементов-то там еще нет! По крайней мере, нужных тебе. Там пока что мусор. Ты опять "ставишь Декарта впереди лошади" -)
Открываешь файл -- считываешь строку -- обрабатываешь строку -- пишешь в файл.
Только учитывай режимы открытия файлов. Для начала я бы посоветовал работать с двумя файлами -- из одного читать, в другой писАть.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 31.05.2011, 19:29   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
#include <conio.h>
#include <stdio.h>
#include <locale.h> 
#include <string.h>
#include <iostream>
#include <io.h>
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL,"Rus");
        FILE *inp = NULL, *outp = NULL;
        char nameIn[200]={0};
        char nameOut[200]={0};
            char str[200];
    char *buff = NULL;
        int size = 0;
        printf("\n Введите имя файла: ");   //спрашиваешь имя
        gets(nameIn);       //считываешь имя
        inp = fopen(nameIn,"r");
        if (inp == NULL)
        {
                printf("Ошибка открытия файла.\n"); 
              getch() ;
        }
        size = _filelength(_fileno(inp));//получаем размер файла
        buff = (char *)malloc(size*sizeof(char));//выделяем буфер под размер файла
        int readsize = fread(buff,sizeof(char),sizeof(char)*size,inp);//считали весь файл в буфф
        for(int i=0;i<readsize;i++)//поменяли его как угодно
        {
                        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')
        {
                str[i] = 'd'; 
                str[i+1] = 'e'; 
                str[i+2] = 'f';
        }
        }
        printf("\nСодержимое файла: \n");
        for(int i=0;i<readsize;i++)//показали
        {
                printf("%c",buff[i]);
        }
        printf("\n Введите имя выходного файла: ");   //спрашиваешь имя
        gets(nameOut);       //считываешь имя
        outp = fopen(nameOut,"w");
        if (outp == NULL)
        {
                printf("Ошибка открытия выходного файла.\n"); 
                getch();
        }
        fwrite(buff,sizeof(char),sizeof(char)*readsize,outp);
        free(buff);
        fclose(outp);
        fclose(inp);
getch() ;
}
программа должна показывать текст из файла в программе уже измененный по циклу.
Но она этого не делает

Последний раз редактировалось a.n.o.n.i.m; 01.06.2011 в 13:59.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 01.06.2011, 14:51   #8
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

тему можно удалять
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами malenkaya Помощь студентам 5 23.04.2011 08:24
Работа с файлами Маняша Общие вопросы Delphi 3 12.12.2010 16:43
Работа с файлами newkobra Общие вопросы C/C++ 9 15.03.2010 22:03
работа с файлами BloodMaX Помощь студентам 7 11.03.2010 22:03
Работа с файлами Dim@ Помощь студентам 1 26.12.2007 22:43