1、getchar()
#include <stdio.h>
int main() {
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}
如果輸入hello回車,輸出結果如下:
hello
hello
i.此時再輸入ctrl+Z(即Windows下的EOF表示),程序結束。
ii.如果輸入hello之後不輸入回車,而是EOF,此時程序並沒有結束,而是可以繼續輸入,但並不換行。
這說明,getchar()從輸入緩衝區中讀取數據時,只有EOF值位於第一位置時or讀取出錯時,纔會返回EOF值。比如:輸入“hello(Ctrl Z)回車”,程序並不會終止,因爲(Ctrl Z)並不位於第一位置;當輸入“(Ctrl Z)hello回車”時,循環即可跳出。
【The return value is EOF for an error or if the end-of-file character or the end-of-string character is encounteredin the first attempt to read a character.】
2. scanf("%c", &ch)
#include <STDIO.H>
int main()
{
char ch;
while(scanf("%c", &ch) != EOF) {
printf("%c",ch);
}
return 0;
}
我在Windows XP系統中,用VC++6.0測試,當輸入“(Ctrl Z)hello回車”時,程序並沒有終止。按“Ctrl Z”和多次回車,也不終止。感覺有點兒奇怪。不過,
當按“(Ctrl Z)回車(Ctrl Z)”便可跳出循環。
我查了一下MSDN,摘錄如下,介紹得也不怎麼詳細。有對此種情況比較清楚的,望請解釋一下。
【The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character.】
3、scanf的格式輸入
%d,遇到數字,'+','-'以外的字符結束,可跳過空格
%f,,%lf:遇到數字, '.', 'e','+','-'之外的字符結束,可跳過空格
%s,從第一個非空格字符起直到下一個空格結束.
%c,遇到字符就賦值,不管是空格還是回車之類的.
假如程序中出現這樣的代碼,scanf("%d,%s,%c,%c).雖然程序是以 ', '作爲分隔的,但%s是不認這個 ', '的,它只認空格,所以會出現變量不能正確賦值的情況,如果你將','去掉,但由於%c卻遇到空格又不會跳過,所以也不會滿足需要,通過上面的我們知道,%c遇到空格是不會跳過的,所以我採取下面這個方式來解決,在%c的前面加一個空格來處理,這樣就可以解決上面的所有問題了,所以我們在使用%c時,要在前面加上一個空格,養成這種習慣可以省去不少麻煩,並且在使用%c之前最好還加上一句fflush(stdin);用來清除緩存.