数字文字をカウントするプログラムの動作について
良い質問のタイトルが思い浮かばず、分かりづらいタイトルで申し訳ありません、C言語について質問させて頂きます。
C言語の参考書を買って夏休み中にプログラムの勉強をしているのですが、何故動作するのかがわからない例があります、ソースは以下の通りです。
#include <stdio.h>
int main(void)
{
int i,ch;
int cnt[10] = {0};
while(1)
{
ch = getchar();
if (ch==EOF) break;
switch(ch)
{
case '0' : cnt[0]++;printf("%d\n",ch);break;/* printfは確認の為 */
case '1' : cnt[1]++;printf("%d\n",ch);break;
case '2' : cnt[2]++;printf("%d\n",ch);break;
case '3' : cnt[3]++;printf("%d\n",ch);break;
case '4' : cnt[4]++;printf("%d\n",ch);break;
case '5' : cnt[5]++;printf("%d\n",ch);break;
case '6' : cnt[6]++;printf("%d\n",ch);break;
case '7' : cnt[7]++;printf("%d\n",ch);break;
case '8' : cnt[8]++;printf("%d\n",ch);break;
case '9' : cnt[9]++;printf("%d\n",ch);break;
}
}
puts("数字文字の出現回数");
for(i=0;i<10;i++)
printf("'%d':%d\n",i,cnt[i]);
getchar();getchar();
return(0);
}
といったプログラムです。
実行し、数値を入力、CTRL+Zで入力を終了し、出現回数を表示させる、という動作自体は無事にできるのですが、何故chの値が変更していくのかがわかりません、数値を入力した時点で51や49といったそれぞれ違う数値が表示されるのですが、chの値を変更させる命令を、何が引き起こしているのかが理解できません、3(51)と判定されて同じ数が無限にカウントされないのは何故なのでしょうか・・・・?
また、その後の無限ループからの脱出をCTRL+Zがどうして引き起こすのかも理解できず困っています、教科書には「CTRL+Zは入力の終了を意味する」とあるのですが、これは一体どういう意味なのでしょうか、強制的に割り込んでEOFを代入するということなのでしょうか・・・?
お時間がある時にでも、教えて頂けると助かります、よろしくお願いします。
お礼
ありがとうございます^^