為什么每次C程序運(yùn)行的時(shí)候總是需要按下Enter鍵才有效呢??
首先了解下兩種緩存輸入定義:
1、完全緩存輸入:
當(dāng)緩存區(qū)被填滿時(shí)才刷新緩沖區(qū)(內(nèi)容發(fā)送到目的地)英支,通常出現(xiàn)在文件輸入中。
2哮伟、行緩存輸入:
指的是出現(xiàn)換行符才刷新緩沖區(qū)干花,鍵盤(pán)通常就是行緩存輸入,所以按下Enter鍵后才刷新緩存區(qū)楞黄。
所以我們的C程序池凄,每次都是等到了Enter鍵按下之后,才開(kāi)始后面數(shù)據(jù)的獲取鬼廓,這個(gè)就是上面所說(shuō)的行緩存輸入肿仑。
常見(jiàn)處理字符輸入、輸出的有<strong>getchar碎税、putchar尤慰、printf和scanf</strong>等,這些都是專(zhuān)門(mén)處理字符的輸入和輸出函數(shù)雷蹂,這些不需要我們定義伟端,只要C程序開(kāi)頭包含了頭文件<strong>stdio.h</strong>,即可使用匪煌。
需要注意的地方责蝠,每當(dāng)用戶按下了Enter時(shí),都會(huì)多傳遞一個(gè)換行符萎庭。
getchar與EOF使用
#include<stdio.h>
int main(){
int ch;
while((ch=getchar())!=EOF){
printf("hello");
}
return 0;
}
如下霜医,若輸入一個(gè) 1 再按回車(chē)鍵,會(huì)輸出 兩個(gè) “hello”; 因?yàn)間etchar會(huì)讀取 1 和 回車(chē)鍵
上面這個(gè)實(shí)例驳规,不管你按了多少次的Enter鍵肴敛,都會(huì)繼續(xù)運(yùn)行下去,因?yàn)镋nter換行符吗购,不等于 EOF医男。
EOF定義:
EOF是C語(yǔ)言中,當(dāng)檢測(cè)某個(gè)文件到結(jié)尾時(shí)巩搏,將返回一個(gè)特殊的值昨登,即EOF(end of file的縮寫(xiě))睬罗,getchar和scanf都會(huì)這樣返回讶坯。其實(shí)EOF可以理解為一個(gè)值棘幸,標(biāo)志著檢測(cè)到了文件結(jié)尾翼闽,并不是在文件中能找得到符號(hào)禽捆。
可以在stdio.h中查看
#define EOF -1
被定義成了-1笙什,不過(guò)不同的系統(tǒng)定義的值可能不同。
讀取文件案例
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE * fp;
int ch;
char fname[50];
scanf("%s",&fname);
fp = fopen(fname,"r");//打開(kāi)讀取文件
if(fp==NULL){
printf("打開(kāi)文件失敗");
exit(1);
}
while((ch=getc(fp))!=EOF){
printf("%s",&ch);
}
fclose(fp);
return 0;
}
這下圖是我的代碼目錄結(jié)構(gòu)
以上是我對(duì)C部分IO的總結(jié)胚想,如有錯(cuò)誤琐凭,還望指正。