即使我设定了限制,我的声明也会不断重复? (对不起,我是全新的)我不知道如何防止它永远重复。它甚至在我设定的条件不满足时也会消失,这应该发生吗?
// 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;
}
答案 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循环的工作原理(注意:所有三个部分都是可选的)。如果condition
为true
,则会继续循环。你把它混合起来并写成for(condition; increment-code; *empty*)
。请注意,您的情况似乎是反过来的。此外,您的递增部分实际上不会更新reg
,您将其添加到自身并将结果抛弃。
正确的代码是
for(; reg <= 50; reg += reg)
另请注意,您的if
语句似乎非常虚假。
if (reg> glass && met)
首先,请在二进制操作周围加一个空格。接下来,这只会测试reg
是否大于glass
且met
是否为非零值。要测试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;
}