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

比如我想把一行内容输入到一个a.txt的第十行,将另一行内容输入到a.txt的第4行,该如何办

只讲个大概未必能解决你的问题,举手之劳,帮你写了。
由于没有说明怎么处理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=0;i<max;i++)
{ fprintf(fp,"%s\n",s[i]); /*输出到文件a.txt中*/
printf("%s\n",s[i]);
}
fclose(fp);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-15
1。将文件全部读到内存 (可以用链表,每行作为一个节点)

2。一行一行的再写回去,先写9行,在第10行写入新的内容,(原来的第10行怎么处理?删除,还是变成第11行?)

3。将其余的内容全部写回去。
第2个回答  2008-12-15
具体行数是不能实现的,你可以用此行的第一数据来判断,用get(),来获得这个数据,判断是否是你要的数据,在进行后面操作
第3个回答  2019-07-07
只讲个大概未必能解决你的问题,举手之劳,帮你写了。
由于没有说明怎么处理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=0;i<max;i++)
{
fprintf(fp,"%s\n",s[i]);
/*输出到文件a.txt中*/
printf("%s\n",s[i]);
}
fclose(fp);
getch();
}
第4个回答  2008-12-16
可以完成.加我