0

プログラムのサンプルは次のとおりです。

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廃棄されて交換されますか? 印刷後?そして、バッファ キューのどの行でnextchar を受け取りますか?

4

0 に答える 0