0

制限を設定しても for ステートメントが繰り返されますか? (申し訳ありませんが、これはまったく初めてです)それが永遠に繰り返されないようにする方法がわかりません。設定した条件を満たしていないのに点灯するのですが、これはどういうことなのでしょうか?

// Garbage Collection
#include <iostream>
#include <cmath>

using namespace std;

int main() {
  double reg, glass, met;
  double total;
  double reg_ratio, glass_ratio, met_ratio;

  cin >> reg;
  cin >> glass;
  cin >> met;

  total = met + glass + reg;

  cout << "The total number of bags is " << total << endl;

  met_ratio = met / total;
  reg_ratio = reg / total;
  glass_ratio = glass / total;

  cout << "The metal ratio is " << met_ratio << endl;
  cout << "The glass ratio is " << glass_ratio << endl;
  cout << "The regular ratio is " << reg_ratio << endl;

  if (met==reg==glass) {
    cout << "All garbage amounts are the same." << endl;
  }
  else if (reg > glass && met) {
    cout << "Regular is the largest." << endl;
  }
  else if (glass > met && reg) {
    cout << "Glass is the largest." << endl;
  }
  else if (met> glass && reg) {
    cout << "Metal is the largest." << endl;
  }

  for (reg >= 50; reg+reg;) {
    cout << "I can't take anymore." << endl;
  }

  return 0;
}  
4

3 に答える 3

3

それは仕組みではありませんfor。これは:

for (initial statement; condition; iteration operation)

initial statement1 回実行され、ループの最初のエントリで、ループは true である限り実行されcondition、操作は反復ごとに実行されます。

あなたの場合、最初のステートメントはreg >= 50であり、何もしません。条件は、何らかの形で評価されたreg+reg場合にのみ falseになり、操作はありません。reg+regfalse

reg+reg気にしませんreg。お探しの操作はおそらくreg += reg.

于 2012-09-29T16:24:47.093 に答える
3

for(initialization; condition; increment-code)for ループのしくみです (注: 3 つの部分はすべてオプションです)。の場合、ループconditiontrue続行します。あなたはこれを混同して のように書きましたfor(condition; increment-code; *empty*)。あなたの状態は逆に見えることに注意してください。また、インクリメント部分は実際には更新されずreg、それ自体に追加して結果を捨てます。

正しいコードは

for(; reg <= 50; reg += reg)

ifまた、あなたの発言は非常に偽物に見えることに注意してください。

if (reg> glass && met)

まず、二項演算の前後にスペースを入れてください。次に、これは ift がよりreg大きく、ゼロ以外の値であるglassかどうかのみをテストします。がと より大きいかmetどうかをテストするには、明示的に 2 回行う必要があります。regglassmet

if(reg > glass && reg > met)

良い本を勧めてもいいですか?

于 2012-09-29T16:24:54.473 に答える
0

他のユーザーから報告された内容は正しいです。forあなたが書いたステートメントは決して終わらないでしょうし、変数を変更することもありません。Xeoforは、ステートメントを書く正しい方法を提供しました。

追加するのは、for-loopには、条件が真のときに実行する必要のある命令が含まれている必要があるということです。あなたの場合、あなたが実行している命令は、条件がもはや真でないときのためのものであるように思われます。変数が値よりも大きいときにメッセージを書きたいだけの場合は、ifステートメントを使用する必要があります。

if (reg >= 50) {
  cout << "I can't take more." << endl;
}
于 2012-09-29T17:07:09.710 に答える