本人学生一枚,第一次在CSND写博客。不为别的,希望能将自己学到的内容写出来,加深自己的记忆。
贴一个自己昨晚写的作业。
//将指定一行的内容全部替换为空格
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
int main(char argc,char* argv[])
{
int cnt;
int line;
int c,c1;
FILE *fp;
int i=1;
char ch;
printf("1.txt有5行,选择其中一行替换为空格:");
scanf("%d",&line);
fp=fopen("./2.txt","r+");
if(fp<0)
{
printf("文件打开失败!\n");
exit(1);
}
//检测行数,如遇到回车'/n',意味着一行的结束,i++
while(i!=line)
{
ch=fgetc(fp);
if(ch=='\n')
{
i++;
}
}
//检测到指定行开头的指针位置,将其赋值给c
c=ftell(fp);
//遍历一遍目标行,确定该行长度,同时for循环结束时c1为该行末尾的指针位置
while(fgetc(fp)!='\n')
{
c1=ftell(fp);
}
//将文件指针移到目标行的行首
fseek(fp,c,SEEK_SET);
//得到目标行的长度
cnt=c1-c;
//for循环插入想要修改的内容
for(i=0;i<cnt;i++)
{
fputc(' ',fp);
}
if(fclose(fp)==0)
printf("文件关闭成功!\n");
else
printf("文件关闭失败!\n");
return 0;
}
昨晚做该题时遇到几个问题:
1,一开始将文件打开方式设为a+了,所以每次写入一个字符时会插在文件的末尾,所以要注意文件打开的方式(r+,r,w,w+,a,a+)。
2,输入目标行line,最开始设定为1,这样检测到目标行时正好在目标行的开头。
如有错误,望大家不惜指点。