Прочесть файл и записать в него новую строку - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные:
    • 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; - завершаем программу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы