std::cin での間違ったループの仕方2020年01月27日 13時29分33秒

最近、間違った標準入力を読み込むコードに出会ったのでおさらい。元のコードは以下の様。無限ループを input の有り無しで終了しようとしている。
#include <string>
#include <iostream>

int main()
{   
    std::string input;
    for(;;)
    {   
        std::cin >> input;
        if( input.empty() )
            break;
        std::cout << ':' << input << std::endl;
    }
}
実は、これでは正しく終了できない。Ctrl-D 等の終端文字を打ち込むと誤動作を始める。

operator>>() は読み込みの状態を返す。

#include <string>
#include <iostream>

int main()
{   
    std::string input;
    while( std::cin >> input )
    {   
        std::cout << ':' << input << std::endl;
    }
}
この様に読み込みの状態を元にループを行えば、Ctrl-D での終了がしっかりと処理できる。

次回