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("");
}
}
运行结果