[C/C++]バッファが三つのキューを作ろう。

兄「バッファが三つのキューを作れって?何に使うの?」
妹「学校の課題なんだよ」
兄「じゃあ、以前、リングバッファとは何かというのを話したから、そのリングバッファを使ったCのプログラムとqueueを使ったコードの二つを紹介するね」

左側がリングバッファ。右側がqueue利用のリングバッファ。

兄「どちらも動作的には、キューが三つ以上になるまで取り込み、表示させるようになっているよ」

妹「あと、Zを入力したらバッファを全部出力できるようにならないかな?」
兄「その場合はIf判定を加えればいいね」

//youwaka.net *** (pσ_σ)q
#include <iostream>
#include "queue"
//youwaka.net *** (pσ_σ)q
//char
int main()
{
    int idx = 0, i = 0;
    char buf[3];
    memset(buf, 0x00, sizeof(buf));
    while (1)
    {
        char m = getchar();
        if (m != '\n') {
            if (buf[i] != 0x00) {
                printf("ring queから取り出しました。%c\n", buf[i]);
                buf[i] = m;
            }
            else {
                buf[i] = m;
            }
            if (m == 'Z')
            {
                while (buf[(i + 1) % 3] != 0)
                {
                    i = (i + 1) % 3;
                    if(buf[i]!=0x00) printf("ring queから取り出しました。%c\n", buf[i]);
                    buf[i] = 0x00;
                }

            }

            i = (i + 1) % 3;
        }
    }
}

//queue
int main2()
{
    queue<char> m_que;
    while (1)
    {
        char m = getchar();
        if (m != '\n')
        {
            m_que.push(m);
            if (m_que.size() > 3) {
                printf("queから取り出しました。%c\n", m_que.front());
                m_que.pop();
            }
            if (m == 'Z')
            {
                while (m_que.size() != 0)
                {
                    printf("queから取り出しました。%c\n", m_que.front());
                    m_que.pop();
                }

            }

        }

    }
}


妹「これで課題ができるよ、お兄ちゃん!でも、なんでこんなテーマにしたの?」
兄「どこかの課題がこれみたいだから、答え合わせに書いとけばブログが伸びるかなぁ、と」
妹「伸びるといいね、お兄ちゃん!」