Прочесть файл и записать в него новую строку - C (СИ)
Формулировка задачи:
Хочу потренироваться работе с файлами. Задача: прочесть файл и записать в него новую строку.
Подскажите плз, где ошибка?
Заранее благодарю.
#include <stdio.h> int main() { FILE * mf; int i=0, j=0; char fname[20], str[100][100], c; for(q; q<=100; q++) { for(w; w<=100; w++) { str[q][w]='\0'; } } char lol[]="\nWho is your daddy??\n\0"; gets(fname); mf = fopen(fname, "a+"); while((c=fgetc(mf)) != EOF) { printf("%c", c); if(c=='\n') { j=0; i++; } else { str[i][j]=c; j++; } } printf("\n"); fputs(lol, mf); while((c=fgetc(mf)) != EOF) { printf("%c", c); if(c=='\n') { j=0; i++; } else { str[i][j]=c; j++; } } fclose(mf); return 0; }
Ап: на строки 10-16 не смотрите, забыл удалить...
Ап2: прога работает, только в файл записывает еще много лишнего О_о
Решение задачи: «Прочесть файл и записать в него новую строку»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> #include <io.h> int main() { FILE * mf; char fname[256]={0}; char lol[]="\nWho is your daddy??\n\0"; gets(fname); int rsize = 0; mf = fopen(fname, "a+"); long size = _filelength(_fileno(mf));//определили рамер файла char *buff = NULL; buff = (char*)malloc(size*sizeof(char));// char[size];//выделяем буф под него while(!feof(mf)) { rsize = fread(buff,sizeof(char),sizeof(char)*size,mf);//читаем } for(int i=0;i<rsize;i++) { printf("%c",buff[i]);//выводим } printf("%d , %d ",size,rsize); fputs(lol,mf);//добавляем запись free(buff); //delete []buff; fclose(mf); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные:
FILE * mf;
- указатель на файлchar fname[256]={0};
- строка для хранения имени файлаchar lol[]=
\nWho is your daddy?\n\0;
- строка для добавления в файлint rsize = 0;
- счетчик чтения файлаmf = fopen(fname,
a+);
- открываем файл на чтение и запись, добавляемa+
_filelength(_fileno(mf));
- получаем размер файлаchar *buff = NULL;
- указатель на буфер для чтения файлаbuff = (char*)malloc(size*sizeof(char));
- выделяем память под буферwhile(!feof(mf))
- читаем файл до концаrsize = fread(buff,sizeof(char),sizeof(char)*size,mf);
- считываем данные из файла в буферfor(int i=0;i<rsize;i++)
- выводим данные из буфера на экранprintf(
%c,buff[i]);
- выводим символ из буфераprintf(
%d , %d,size,rsize);
- выводим размер файла и количество прочитанных символовfputs(lol,mf);
- добавляем новую строку в файлfree(buff);
- освобождаем память, выделенную под буферfclose(mf);
- закрываем файлreturn 0;
- завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д