3

このサイトで推奨されている「C++ Primer 5th Edition」を使用しています。For ループと While ループを調べてみたところ、これらは実質的に同じであるという結論に達しました。少なくともそれは私が集めたものです。「for ループはループ回数がわかっている場合に使用し、while ループは条件が満たされるまでループする場合に使用する」という言葉が最もよく説明されていると思います。しかし基本的に、コンパイラはこの 2 つを区別せず、同じ意味で使用できます。

この本はこのコードを提示しました(説明された方法でさえ機能しません):

<iostream>

int main()
{

int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read

while (std::cin >> value)   {
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;

    }
}

添付の演習では、「cin から読み取った一連の整数の合計を出力する独自のバージョンのプログラムを作成する」と述べられています。彼らは私に For ループを使用してほしいと思っていると思います。それでやってみました。私は苦労していますが。

この本には、「For ループは、initstatement、条件、および式で構成されています。while ループでは、"std::cin >> value" が私の条件であり、式はありませんでした。私が持っているのはinitstatementと条件だけの場合のforループですか?

#include <iostream>


int main()

{
int sum = 0;

for (int value = 0; std::cin >> value; "EXPRESSION GOES HERE")
    sum += value;
std::cout << "The sum is: " << sum << std::endl;
return system("pause");
}
4

4 に答える 4

4

エラー、 ...に置き換えることで、任意whileのループをループとして記述できます。forwhile(...)for(;...;)

for (;std::cin >> value;)   {

}

ただし、投稿したコードについては何もforループを示唆していません。通常、実際に何かをカウントしたり、コレクションを反復処理したりする場合は、for ループを使用します。あなたの意図は、条件が満たされるまでループすることwhileですfor

これを for ループで「正しく」記述しなければならない場合は、次のようなものを使用すると思います。

int sum = 0;
for (int i = 0; std::cin >> i; sum += i); // empty loop body
std::cout << sum << std::endl;

whileただし、意味的に正しいループを使用する可能性が高くなります。

于 2013-07-24T17:59:40.900 に答える
1

答えにとって重要なことは、 for 式のすべての部分を省略できることです。

for (;;) break;

有効なコードになります。

また、この場合は C++ の本を脇に​​置いて C に戻ることをお勧めします。ループのセマンティックの基本はどちらも同じであり、C の方がはるかに単純だからです。

編集:あなたの問題の完全な解決策は次のようなものかもしれません:

#include <iostream>


int main()

{
int sum = 0;

for (int value = 0; std::cin >> value; sum+= value); 

// alternative version, a bit easier to read probably:
// for (int value = 0; std::cin >> value;) sum+= value;

std::cout << "The sum is: " << sum << std::endl;
return system("pause");
}
于 2013-07-24T18:01:32.610 に答える