Чтение текста из файла и вывод на экран - C (СИ)
Формулировка задачи:
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
int main()
{
setlocale(LC_ALL,"Rus");
char name[200];
char str[200];
printf("\n Введите имя файла: "); //спрашиваешь имя
gets(name); //считываешь имя
FILE *f = fopen(name,"r");
fscanf(f,"%c\n",str);/* чтение из файла */
if (f == NULL)
{
printf("Ошибка открытия файла.\n");
}
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';
}
fprintf(stdout, "%c", str); /* вывод на экран */
fprintf(f, "%s",name); /* писать в файл */
fclose(f);
getch() ;
}Решение задачи: «Чтение текста из файла и вывод на экран»
textual
Листинг программы
#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 *buff = NULL;
int size = 0;
do{
printf("\n Введите имя файла: "); //спрашиваешь имя
gets(nameIn); //считываешь имя
inp = fopen(nameIn,"r");
if (inp == NULL)
{
printf("Ошибка открытия файла.\n");
}
}while(inp==NULL);
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++)//поменяли его как угодно
{
//какойто код
}
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");
exit(1);
}
fwrite(buff,sizeof(char),sizeof(char)*readsize,outp);
free(buff);
fclose(outp);
fclose(inp);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Устанавливается русская локаль
- Объявляются переменные: файловые указатели inp и outp, строки nameIn и nameOut, буфер buff и размер size
- В цикле do-while запрашивается имя входного файла и считывается в переменную nameIn. Если файл не открывается, выводится сообщение об ошибке и цикл продолжается.
- Вычисляется размер входного файла и выделяется буфер под этот размер
- Файл считывается в буфер с помощью функции fread
- В цикле for происходит какая-то обработка считанных данных
- Выводится содержимое буфера
- Запрашивается имя выходного файла и считывается в переменную nameOut.
- Открывается выходной файл для записи
- Если файл не открывается, выводится сообщение об ошибке, программа завершается и выводится код ошибки
- Считанные данные записываются в выходной файл
- Буфер освобождается с помощью функции free
- Файлы закрываются с помощью функции fclose
- Программа возвращает 0, что означает успешное завершение