#include <stdio.h>void main(){FILE * fp3;char buffer[64];if((fp3=fopen("file4.txt","a"))==NULL){printf("can't open file \n");exit(1);}while(strlen(fgets(buffer,64,stdin))>0){fputs(buffer,fp3);fputs("\n",fp3);}fclose(fp3);}這是教材上的一個程序,目的是“從鍵盤輸入若干行字符,把他們添加到磁盤文件file4.txt中”,但我執行了好多次,不但沒有添加進去,反而程序無法正常結束,不管怎么按回車都沒能退出程序。而教材解釋說 while(strlen(fgets(buffer,64,stdin))>0)的功能是“從鍵盤讀入一行字符,并測試讀入的字符串長度是否為0”,最后解釋“程序通過檢測輸入的字符串長度是否為0控制是否結束循環,因而輸入完所有的字符串之后,在輸入新一行開始就輸入一個回車鍵,便可以終止程序”,貌似很有道理,可執行起來怎么就沒完沒了了呢?把程序改成下面的形式倒是可以結束了,可是輸出來卻不如人意。在vc中產生了一連串火星文,在TC中只能輸出第一個字符,然后換行。#include<stdio.h>#include<string.h>int main(){FILE * fp;char s[64];char s2[64];int i;int j=0;if((fp=fopen("f:\\cfile2.txt","w"))==NULL){printf("cfile.txt canot be open ! \n");getchar();return 0;}printf("請輸入一組字符的字符串并回車,按esc鍵退出:\n");while(strlen(fgets(s,64,stdin))>0){for(i=0;i<64;i++){if(s[i]=='\0'){ while(j<i-1)s2[j++]=s[j++];fputs(s2,fp);fputs("\n",fp);if(fclose(fp)!=0){printf("f:\\cfile.txt cannot be closed !\n");}elseprintf("cfile.txt was now closed !\n");getchar();return 0;}}fputs(s,fp);fputs("\n",fp);}if(fclose(fp)!=0){printf("f:\\cfile.txt cannot be closed !\n");}elseprintf("cfile.txt was now closed !\n");getchar();return 0;}
3 回答

青春有我
TA貢獻1784條經驗 獲得超8個贊
while(strlen(fgets(buffer,64,stdin))>2)
{
fputs(buffer,fp3);
}
fclose(fp3);
}
別忘了 回車,換行
至于你的那程序,多的沒認真看,不過j=0放循環體內吧

ITMISS
TA貢獻1871條經驗 獲得超8個贊
#include <stdio.h>
void main()
{
FILE * fp3;
char buffer[64];
if((fp3=fopen("file4.txt","a"))==NULL)
{
printf("can't open file \n");
exit(1);
}
while(strlen(fgets(buffer,64,stdin))>0)
{
fputs(buffer,fp3);
fputs("\n",fp3);
}
fclose(fp3);
}
你的函數調用fgets并沒有錯啊
把while改成if就可以了,只需要將buffer的值寫到文件中一次就可以了,沒有必要用循環,如果用循環的話,條件一直成立,一直向其中寫入數據,循環無法結束...
- 3 回答
- 0 關注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消