由于没有说明怎么处理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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)