【案例描述】
編程實現:輸入若干個ASCII碼字符(按回車鍵結束),統計數字、英文字母的個數。
輸入:Ab,45Eey 8#
【案例分析】
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);
}