getchar 函數的功能是讀取字符串並將其返回。輸入結束或讀取過程中發生錯誤時,就會返回EOF值。
#include <stdio.h>
int main(void){
int i, str;
int count[10] = {0};
puts("請輸入數字:");
puts("輸入完成後 按 Enter");
puts("再按 Ctrl + z ");
puts("Enter 結束");
while ((str = getchar()) != EOF){
switch (str){
case '0' :
count[0]++;
break;
case '1' :
count[1]++;
break;
case '2' :
count[2]++;
break;
case '3' :
count[3]++;
break;
case '4' :
count[4]++;
break;
case '5' :
count[5]++;
break;
case '6' :
count[6]++;
break;
case '7' :
count[7]++;
break;
case '8' :
count[8]++;
break;
case '9' :
count[9]++;
break;
}
}
puts("數字字符的出現次數:");
for (i = 0; i < 10; i++){
printf("%d: %d\n", i, count[i]);
}
return 0;
}
運行結果:
注:
在需要對象式宏EOF的程序中,如果沒有包含<stdio.h>頭文件,則進行如下定義式不行的。
#define EOF -1
因爲EOF規定爲“負”,但不一定是“-1”。
緩衝:
緩衝:
在此程序中,並不是每讀入一個字符後就馬上輸出,而是按下回車鍵後一併輸出。
C語言的輸入輸出一般會將讀入的字符以及待輸出的字符暫時保存在緩存中,當達到下列條件時才進行實際的輸入輸出操作。
- 1.緩存已滿 (全緩衝)
- 2.輸入換行符 (行緩衝)
- 3.立即輸出 (無緩衝)
由於每個數字字符在ASCII 碼錶中都有對應的值,通過以下程序可對字符的值進行打印。
#include <stdio.h>
int main(void){
int i;
printf("EOF = %d\n", EOF);
for (i = 0; i< 10; i++){
printf("'%d' = %d\n", i, '0' + i);
}
return 0;
}
運行結果:
利用ASCII 碼錶中字符對應的值,可改善 計算一串字符中出現的數字字符數程序中的代碼,使程序變得更加簡潔。
#include <stdio.h>
int main(void) {
int i, j, str;
int count[10] = { 0 };
puts("請輸入數字:");
puts("輸入完成後 按 Enter");
puts("再按 Ctrl + z ");
puts("Enter 結束");
while ((str = getchar()) != EOF) {
if (str >= '0' && str <= '9') {
count[str - '0']++;
}
}
puts("數字字符的出現次數:");
for (i = 0; i < 10; i++) {
printf("%d: ", i);
for (j = 0; j < count[i]; j++){
putchar('*');
}
puts("");
}
}
運行結果