-1

を使用してコンソールからテキストを入力できることを知っていますwhile (std::cin >> str)

同等の for ループとして次を試すと、Visual C++ 2010 で役に立たないエラーが発生します。これが技術的に正しくないのはなぜですか?

    for (true; true; std::cin>>str) 
    {
         // Get input forever 
    }
4

4 に答える 4

7

あなたのエラーは、初期化されていない変数を使用したことによるものだと思いますstr。その理由は、for ループの最後の引数は、ループが最初の反復を完了するまで実行されないためです。

また、無限ループが必要な場合は、これまたは他のいくつかのループ設定を行うことができます。

for ( ; ; ) {
    std::cin >> str;
    // Do your stuff
}
于 2012-09-13T04:18:30.213 に答える
6

同等のものは

for(;std::cin>>str;) {}
于 2012-09-13T04:14:47.407 に答える
5

同等の for ループは次のようになります。

for (; std::cin >> str; ) {}

for ループの seconde ステートメントがいつ停止するかを指示するためです。入力が終了するとstd::cin >> strEOF を返し、ループを停止します。

于 2012-09-13T04:21:51.220 に答える
0

これは for の有用な使用法ではありません。for は反復することを意図しており、while のように結果が発生するまでループしません。

for(;std::cin>>str;) {}

あなたが探しているものです(上記のように)。しかし、本当の問題は、while の代わりに余分なボイラープレート コードとエラーのリスクを追加する理由です。

また、予期しない結果が奇妙なことをする可能性があるため、条件付きテスト (for または while) での代入は一般的に好きではありません。このケースはおそらく問題ありませんが、私は次のことを好みます。

while(true) {
    cin >> str;

    if(....) {
        break;
    }
}

利点: これは非常に明確であり、明示的にプログラムしたものだけがループを壊すことができます。

欠点: これにはより多くのコード行が必要であり、コード分析ツールでエラーが発生する可能性がある無限ループがあります。

于 2012-09-13T04:29:32.110 に答える