本人學生一枚,第一次在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,這樣檢測到目标行時正好在目标行的開頭。
如有錯誤,望大家不惜指點。