プログラムのサンプルは次のとおりです。
int main(void)
{
char input;
printf("\nEnter phone number: ");
while ((input = getchar()) != '\n') {
switch (toupper(input)) {
case 'A': case 'B': case 'C':
printf("2");
break;
case 'D': case 'E': case 'F':
printf("3");
break;
case 'G': case 'H': case 'I':
printf("4");
break;
case 'J': case 'K': case 'L':
printf("5");
break;
case 'M': case 'N': case 'O':
printf("6");
break;
case 'P': case 'R': case 'S':
printf("7");
break;
case 'T': case 'U': case 'V':
printf("8");
break;
case 'W': case 'X': case 'Y':
printf("9");
break;
default:
putchar(input);
}
}
printf("\n\n");
return 0;
}
私の質問は、ここの流れは一体どのように機能するのでしょうか? プログラムがたどったパスを理解できないようです。char
変数は魔法のように配列になりますか? putchar()
入力された最初の文字ではなく、行全体を印刷するのはどうですか? 1 つの文字を取得して出力するはずのものが、switch ステートメントで文字を変更しながら、1 行全体の文字を読み取って出力するのはどのように正確ですか? 入力されたときにそれぞれをテストchar
しますか?しかし、文字列はどのように文字列として出力されるのでしょうか?
編集: いくつかの調査を行ったところ、キーボード バッファーについて読みましたが、これが混乱の原因のようです。私の知る限り、単一の文字を受け取り、出力しますgetchar()
。putchar()
が戻ってくると、ループが次の「バッファリングされた」文字を継続的に要求することを認識していますが、getchar()
取得する必要があることに少し混乱していますが、さらに混乱しているのはputchar()
. ループの最後で、それが壊れて条件に移行すると、その1つの文字が出力され、ループが実行されるたびに残りの文字が1つずつ出力されますか? 新しい行が読み取られた時点でループを停止するだけですか? もしそうなら、以前に印刷されたものだけが画面に表示されますか? その場合、印刷された文字は実行ごとに隣り合って印刷され、文字列のような錯覚を与えますか? これについて確認が必要です。また、いつchar
廃棄されて交換されますか? 印刷後?そして、バッファ キューのどの行でnext
char を受け取りますか?