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 での終了がしっかりと処理できる。

次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/01/27/9207099/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。