【案例描述】
编程实现:输入若干个ASCII码字符(按回车键结束),统计数字、英文字母的个数。
输入:Ab,45Eey 8#
输出:数字3个、英文字母5个
【案例分析】
1、数字的ASCII码值为[48,57]上的整数。
2、英文字母的ASCII码值为[65,90]和[97,122]上的整数。
3、getc和scanf函数均从输入缓冲区中读取数据。当输入缓冲区为空时,函数会暂停,等待输入(所有输入均存入输入缓冲区),当读到回车符时,输入结束,函数从输入缓冲区读取数据,程序继续执行。
4、尽管getc(stdin)只能从输入缓冲区读取一个字符,但输入时用户可以输入多个字符,直到按回车符,getc(stdin)才开始从输入缓冲区读取字符。例如:执行以下代码的流程是:
main()
{ int n=0;
while(getc(stdin)!='\n')n++;
printf("%d",n);}
(1)执行语句int n=0;
(2)执行getc函数,从输入缓冲区读取一个字符。这时输入缓冲区为空,程序暂停,等待输入。
(3)如果输入"ab"后回车,这时输入缓冲区存储的是"ab\n"
(4)getc函数从缓冲区读取字符"a"
(5)输入缓冲区自动删除读取的字符,这时输入缓冲区存储的是"b\n"
(6)执行"getc(stdin)!='\n'。条件成立,执行"n++"
(7)执行getc函数,直接从输入缓冲区读取字符"b"(不再等待输入)
(8)输入缓冲区自动删除读取的字符,这时输入缓冲区存储的是"\n"
(9)执行"getc(stdin)!='\n'。条件成立,执行"n++"
(10)执行getc函数,直接从输入缓冲区读取字符"\n"(不再等待输入)
(11)输入缓冲区自动删除读取的字符,这时输入缓冲区为空
(12)执行"getc(stdin)!='\n'。条件不成立,循环结束
(13)执行"printf("%d",n);",输出n的值,程序结束
【参考代码】
#include<stdio.h>
main()
{ int c,n=0,s=0;
while((c=getc(stdin))!='\n')
if(c>=48&&c<=57)n++;
else if((c>=65&&c<=90)||(c>=97&&c<=122))s++;
printf("数字%d个,英文字母%d个",n,s);
}