c语言中如何向一个.txt文件的指定行输入内容

c语言中如何向一个.txt文件的指定行输入内容,第1张

只讲个大概未必能解决你的问题,举手之劳,帮你写了。

由于没有说明怎么处理a.txt原来的第4行和第10行,这里分别将它们顺次移到下一行。一个完整的c程序如下,在win-tc和Dev-c++下已运行通过。

#include<stdio.h>

#include<string.h>

#include<conio.h>

#define N 255 /* 假定文章的总行数不超过255,可更改 */

main()

{

int i=0,max

char s[N][101],s1[101],s2[101],*p,*q="a.txt"

FILE *fp

printf("Please input string1(not more than 100 letters):\n")

gets(s1)

printf("Please input string2(not more than 100 letters):\n")

gets(s2)

if ((fp=fopen("a.txt","r+"))==NULL)

{ printf("Open file %s error!",q)

getch()

exit(0)

}

while(i<3&&fgets(s[i],101,fp)!=NULL) /*按行读3行原文章*/

{ p=strchr(s[i],'\n')

if(p) *p='\0'/*消除每行最后的回车符*/

i++

}

strcpy(s[i++],s1)/*插入到第四行*/

while(i<9&&fgets(s[i],101,fp)!=NULL) /*继续读原文章*/

{ p=strchr(s[i],'\n')

if(p) *p='\0'

i++

}

strcpy(s[i++],s2)/*插入到第十行*/

while(i<N&&fgets(s[i],101,fp)!=NULL) /*继续读原文章*/

{ p=strchr(s[i],'\n')

if(p) *p='\0'

i++

}

max=i/* max为文章实际的总行数 */

rewind(fp)

for(i=0i<maxi++)

{ fprintf(fp,"%s\n",s[i])/*输出到文件a.txt中*/

printf("%s\n",s[i])

}

fclose(fp)

getch()

}

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)

}

1.

需要 *** 作制定的文件,首先需要获取文件的文件描述符(句柄):fd

=

fopen("test.txt","w")

2.

使用fprintf(),或者fputs()函数将数据格式化写入该文本

#include

main()

{

FILE *f

f=fopen("wenzhang.txt","w")

fprintf(f,"this is a c program !")

fclose(f)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存