C语言 计算一串字符中出现的数字字符数

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("");
	}
}

运行结果

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值