/*以下程序的功能是:實現從鍵盤輸入字符,存入文件d:\\fseekin.txt,并將其反寫到d:\\fseekout.txt*/#include<stdio.h>#include<string.h>int main(int argc,char * argv[]){FILE * fpin,* fpout;int i=0;int j=0;char ch;if((fpin=fopen("d:\\fseekin.txt","w+"))==NULL)//*注意!不能寫成"w",因為后面還要讀!{printf("打開文件\"d:\\fseekin.txt\"時出錯!\n");getchar();return 0;}if((fpout=fopen("d:\\fseekout.txt","w+"))==NULL){printf("打開文件\"d:\\fseekout.txt\"時出錯!\n");getchar();return 0;}printf("請輸入一組字符串并以#號結束:\n");//*下面while語句的功能實現從顯示器接受字符,輸入到文件d:\\fseekin.txt中while((ch=fgetc(stdin))!='#'){fprintf(fpin,"%c",ch);i++; //*記住輸入文件的字符數} fprintf(stdout,"剛才輸入的%d個字符使\"d:\\fseekin.txt\"的文件指針向前移動了%d個字節\n",i,ftell(fpin));j=ftell(fpin);printf("fpin中指針偏移%d個字節\n",j);i=1;/*重新初始化i,為下面的循環做準備//*下面while 語句的功能實現將d:\\fseekin.txt的所有字符反寫到d:\\fseekout.txtwhile(ftell(fpin)!=0&&ftell(fpin)!=-1&&i<=j)//* 為什么不能用for(i=1;i<=j;i++)?好 像用了之后就只能倒置一半的字符!{ fseek(fpin,-i,2);fputc(fgetc(fpin),fpout);i++;}//*下面的語句測試并關閉打開的文件if(fclose(fpin)||fclose(fpout)){printf("關閉文件\"d:\\fseekin.txt\"或\"d:\\fseekout.txt\"時出錯!\n");getchar();return 0;}printf("關閉文件成功!\n");getchar();return 0;}我的問題是為什么將第二個while語句即while(ftell(fpin)!=0&&ftell(fpin)!=-1&&i<=j){ fseek(fpin,-i,2);fputc(fgetc(fpin),fpout);i++;}該為:for(i=1;i<=j;i++){ fseek(fpin,-i,2);fputc(fgetc(fpin),fpout);i++;}
1 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
for(i=1;i<=j;i++)
{
fseek(fpin,-i,2);
fputc(fgetc(fpin),fpout);
i++;
}
每次i自加兩次,當然提前了,而且是隔位的,循環體內i++刪了
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消