即使我设定了限制,我的声明也在不断重复?

时间:2012-09-29 16:21:19

标签: c++ macos

即使我设定了限制,我的声明也会不断重复? (对不起,我是全新的)我不知道如何防止它永远重复。它甚至在我设定的条件不满足时也会消失,这应该发生吗?

// 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;
}  

3 个答案:

答案 0 :(得分:3)

这不是for的工作方式。它是:

for (initial statement; condition; iteration operation)

initial statement执行一次,在循环的第一个条目中,只要condition为真,就执行循环,并且每次迭代都会执行操作。

在您的情况下,初始语句为reg >= 50,它不执行任何操作,条件为reg+reg,如果reg+reg以某种方式评估为false,则该条件仅为false,并且没有操作。

reg+reg不会修改reg。您正在寻找的操作可能是reg += reg

答案 1 :(得分:3)

for(initialization; condition; increment-code)是for循环的工作原理(注意:所有三个部分都是可选的)。如果conditiontrue,则会继续循环。你把它混合起来并写成for(condition; increment-code; *empty*)。请注意,您的情况似乎是反过来的。此外,您的递增部分实际上不会更新reg,您将其添加到自身并将结果抛弃。

正确的代码是

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

另请注意,您的if语句似乎非常虚假。

if (reg> glass && met)

首先,请在二进制操作周围加一个空格。接下来,这只会测试reg是否大于glassmet是否为非零值。要测试reg是否大于glass且大于met,您必须明确执行两次:

if(reg > glass && reg > met)

我可以推荐a good book吗?

答案 2 :(得分:0)

其他用户报告的内容是正确的:您编写的for语句永远不会结束,也不会更改任何变量。 Xeo为您提供了编写for语句的正确方法。

我要补充的是for - 循环应该包含条件为真时需要执行的指令。在您的情况下,您正在执行的指令似乎是在条件不再正确时。如果您只想在变量高于值时编写消息,则应使用if语句。

if (reg >= 50) {
  cout << "I can't take more." << endl;
}