getchar()で1文字入力してもdo-whileが2回実行されてしまう


下記のコードで例えば `p` と入力すると、なぜか `dayo` が二回表示されてしまいます。  
do while の仕様はいったいどういうものなのでしょうか？

入力を含んだ処理を一回やったあとに含まない処理をもう一度しているようにみえます。  
よろしくお願いします。

環境：  
Ubuntu  
gcc 7.5.0

* * *

**出力結果:**

[code]

    p
    p dayo
    
    dayo
    
[/code]

**ソースコード:**

[code]

    int
    main(int argc, char *argv[])
    {
        char c;
    
        do
        {
            c = getchar();
            printf("%c dayo\n",c);
    
        } while (c != 'q');
    
        return 0;
    }
    
[/code]




`p`を入力するとき、改行も入力していませんか？  
そうであれば、`p`と改行でwhileループが２回実行されています。  
`p`のあと`^d`(ctrl+d)を入力すれば`p`だけを入力することになり、想定した動作をするはずです。




`p`を入力するとき、改行も入力していませんか？  
そうであれば、`p`と改行でwhileループが２回実行されています。  
`p`のあと`^d`(ctrl+d)を入力すれば`p`だけを入力することになり、想定した動作をするはずです。

