C语言如何在文件中指定的一行上插入一行??

C语言如何在文件中指定的一行上插入一行??,第1张

由于你的文件类型是文本文件,不是二进制文件,所以麻烦些。但是步骤还是好做的。基本思路:从第一个文本文件中用 fgets() 函数读出一行数据,对读出的每一行数据进行判断,如果需要在它的适当位置插入一行,你就把相应的新内容、以及该行的内容写到第二个文本文件中。如果不需要在该位置插入一行,那就直接将该行数据用 fprintf() 函数写入第二个文本文件中。

#include<stdio.h>

void main(void)

{

FILE *fpIn // 输入文件的指针

FILE *fpOut // 输出文件的指针

char str[120] // 用来存储从文件中读取出的”一行“字符串信息

int row = 1

fpIn = fopen("data5612.cpp", "r") // 以只读和文本格式打开data5612.cpp,这里的文件名无所谓大小写

fpOut = fopen("data5612.txt", "w") // 以创建方式(也叫写方式)打开data5612.txt文件

fgets(str, 81, fpIn) // 从文件中读取一行信息,保存到str数组中。这里要注意的是这个81,一般情况下,编写文本格式文件的人,都习惯遇到行尾就敲回车,所以,一般情况下,文本文件一行最多80个字符。如果,一行不够80个字符,这个函数会自动只读到'\n'就结束了。

while(!feof(fpIn))// 判断上一次fgets()是否正常(即,没有遇到文件尾部)

{

fprintf(fpOut, "%04d %s\n", row, str)// 在读入的每一行信息前,加入0000到9999的行号(应该够用了吧),呵呵呵呵

row++// 行号加一

fgets(str, 81, fpIn)// 读取下一行

}

fclose(fpIn) // 关闭文件

fclose(fpOut)

}

程序已验证,木有问题。

1、关键使用这几个函数

int fseek (FILE *stream,long offset,int fromwhere)

long ftell(FILE *stream)

int rewind(FILE *stream)

2、例程:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <Windows.h>

/* 读出文件放到数组中,新增数据插入到该数组中;

   重新将数组中的数据写入该文件中

*/

void main(int argc,char * agrv)

{

    FILE *fp

    char name[20]       //输入变量

    int sum             //输入变量

    char fName[10][20]  //可存储10个人名

    int fScore[10]      //存储10个分数记录

    char buff1[20]

    char buff2[20]

    int i=0

    //打开存储文件

    if ((fp=fopen("c:\\scorelist.txt","r"))==NULL)

    {

        printf("Can not open the file")

        getch()

        exit(0)

    } 

    else

    {   

        while (!feof(fp))

        {   

            ZeroMemory(buff1,sizeof(buff1))       //清空内存

            ZeroMemory(buff2,sizeof(buff1))

            fgets(buff1,sizeof(buff1),fp)         //读取名称

            fgets(buff2,sizeof(buff2),fp)         //读取第二行分数

            if (strcmp(buff1,"")==0)

            {

                continue

            }

            else

            {

                strcpy(fName[i],buff1) 

                printf("%s",fName[i])                 //输出名称

                fScore[i] = atoi(buff2)                //将字符型转换成int型

                printf("%i\n",fScore[i])              //打印输出分数值

            }

            i++

        }

    }

    fclose(fp)

    //打开存储文件,将排好序的数据重新写入文件中

    if ((fp=fopen("c:\\scorelist.txt","w"))==NULL)

    {

        printf("Can not open the file")

        getch()

        exit(0)

    } 

    else

    {   

        printf("Input the new name:\n")

        scanf("%s",name)

        printf("Input the new score:\n")

        scanf("%i",&sum)

        int j =0

        //获取新增积分排序位置

        while(sum < fScore[j])

        {

             j++

        

        }

        //移动数据重新对数组排序,从后往前排序

        int m = i

        while (i>j)

        {

            strcpy(fName[i],fName[i-1])

            fScore[i] = fScore[i-1]

            i--

        }

        strcpy(fName[j],name)

        strcat(fName[j],"\n")

        fScore[j] = sum

        //写入文本文件

        int k=0

        while(k<=m)

        {

            fputs(fName[k],fp)

            fprintf(fp,"%i\n",fScore[k])

            k++

        }

    }    

    fclose(fp)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11960162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存