code.club

 找回密碼
 立即註冊
搜索
查看: 6755|回復: 1
打印 上一主題 下一主題

有關函式 getc()的原理疑問

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2015-7-19 17:31:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有關函數 getc() 的原理。如下例:

FILE *fp;
char ch;
fp=fopen("test.txt","w");
while((ch=getc(fp))!=EOF) //如果未達檔尾
printf("%c",ch);//一字一字印出來

fclose(fp);

return 0;

現在有個不解之處,就是一般的while()用法,都會有個遞增或遞減的步驟,如下:

while(x<10)
{ printf("%d",x);
x++;
}

但上述的例子中並無這個條件,但卻能一字一字的印出 test.txt 的內容,請問是為什麼?我目前的理解是 getc()本身就有自動遞增的功能?
其他類似的如 putc()則似乎就是只能印一個就不再繼續,除非有遞增方法寫出來。

thanks.
回復

使用道具 舉報

沙發
發表於 2015-7-19 22:46:24 | 只看該作者
專家回說:

其實while()並沒有遞增或遞減的功能,
它是一個條件式迴圈,
功能是:「括號()內的條件如果成立的話,執行後一行的程式碼」。
在這個例子裡,之所以可以有遞增或遞減的功能,
是因為條件式中的括號(x<10)內的x<10條件剛好持續成立,
在資訊的語言裡面就是:「括號()內的布林值為真,迴圈就會一直執行」。
這裡getc()之所以有類似遞增或遞減這類持續執行的效果,
因為getc()實作成:會按順序取得檔案的字元,
只要有取到字元就會回傳值為「真」的布林值,
所以getc()在檔案還沒結束前,條件會一直成立,
迴圈會持續取值!
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-11-21 23:33 , Processed in 0.080414 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表