を使用してコンソールからテキストを入力できることを知っていますwhile (std::cin >> str)
。
同等の for ループとして次を試すと、Visual C++ 2010 で役に立たないエラーが発生します。これが技術的に正しくないのはなぜですか?
for (true; true; std::cin>>str)
{
// Get input forever
}
を使用してコンソールからテキストを入力できることを知っていますwhile (std::cin >> str)
。
同等の for ループとして次を試すと、Visual C++ 2010 で役に立たないエラーが発生します。これが技術的に正しくないのはなぜですか?
for (true; true; std::cin>>str)
{
// Get input forever
}
あなたのエラーは、初期化されていない変数を使用したことによるものだと思いますstr
。その理由は、for ループの最後の引数は、ループが最初の反復を完了するまで実行されないためです。
また、無限ループが必要な場合は、これまたは他のいくつかのループ設定を行うことができます。
for ( ; ; ) {
std::cin >> str;
// Do your stuff
}
同等のものは
for(;std::cin>>str;) {}
同等の for ループは次のようになります。
for (; std::cin >> str; ) {}
for ループの seconde ステートメントがいつ停止するかを指示するためです。入力が終了するとstd::cin >> str
EOF を返し、ループを停止します。
これは for の有用な使用法ではありません。for は反復することを意図しており、while のように結果が発生するまでループしません。
for(;std::cin>>str;) {}
あなたが探しているものです(上記のように)。しかし、本当の問題は、while の代わりに余分なボイラープレート コードとエラーのリスクを追加する理由です。
また、予期しない結果が奇妙なことをする可能性があるため、条件付きテスト (for または while) での代入は一般的に好きではありません。このケースはおそらく問題ありませんが、私は次のことを好みます。
while(true) {
cin >> str;
if(....) {
break;
}
}
利点: これは非常に明確であり、明示的にプログラムしたものだけがループを壊すことができます。
欠点: これにはより多くのコード行が必要であり、コード分析ツールでエラーが発生する可能性がある無限ループがあります。