C++ 我的for语句不断重复,即使我设置了限制?

C++ 我的for语句不断重复,即使我设置了限制?,c++,macos,C++,Macos,我的for语句不断重复,即使我设置了限制?(对不起,我对这一点完全陌生)我不知道如何避免它永远重复。即使我设定的条件不满足,它也会熄灭,这应该发生吗 // Garbage Collection #include <iostream> #include <cmath> using namespace std; int main() { double reg, glass, met; double total; double reg_ratio, glass_

我的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;
}  
//垃圾收集
#包括
#包括
使用名称空间std;
int main(){
双reg,玻璃,met;
双倍总数;
双折射率、玻璃折射率、金属折射率;
cin>>reg;
cin>>玻璃;
cin>>大都会;
总计=met+玻璃+注册;

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

for (initial statement; condition; iteration operation)
initial语句
执行一次,在循环的第一个条目上,只要
条件
为真,循环就会执行,并且每次迭代都会执行操作

在您的情况下,初始语句是
reg>=50
,它不起任何作用,条件是
reg+reg
,只有当
reg+reg
以某种方式计算为
false
,并且没有操作时,它才会为false


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

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

for (initial statement; condition; iteration operation)
initial语句
执行一次,在循环的第一个条目上,只要
条件
为真,循环就会执行,并且每次迭代都会执行操作

在您的情况下,初始语句是
reg>=50
,它不起任何作用,条件是
reg+reg
,只有当
reg+reg
以某种方式计算为
false
,并且没有操作时,它才会为false

reg+reg
不会修改
reg
请注意。您要查找的操作可能是
reg+=reg

for(初始化;条件;增量代码)
是for循环的工作方式(注:所有三个部分都是可选的)。如果
条件
,它将继续循环。您将其混合在一起,并将其作为(条件;增量代码;*空*)
写入。请注意,您的条件似乎是相反的。此外,您的增量部分实际上没有更新
reg
,您将其添加到自身并丢弃结果

正确的代码是

for(; reg <= 50; reg += reg)
首先,请在二进制操作周围留出一个空格。接下来,这将只测试
reg
是否大于
glass
,以及
met
是否为非零值。要测试
reg
是否既大于
glass
又大于
met
,必须明确执行两次:

if(reg > glass && reg > met)
我可以推荐吗?

for(初始化;条件;增量代码)
是for循环的工作方式(注意:所有三个部分都是可选的)。如果
条件
true
,它将继续循环。您将其混合在一起,并将其编写为
for(条件;增量代码;*空*)
。请注意,您的条件似乎相反。此外,您的递增部分实际上并没有更新
reg
,您将其添加到自身中,并将结果丢弃

正确的代码是

for(; reg <= 50; reg += reg)
首先,请在二进制操作周围留出一个空格。接下来,这将只测试
reg
是否大于
glass
,以及
met
是否为非零值。要测试
reg
是否既大于
glass
又大于
met
,必须明确执行两次:

if(reg > glass && reg > met)

我可以推荐吗?

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

if (reg >= 50) {
  cout << "I can't take more." << endl;
}
我想补充的是,for
-循环的
应该包含在条件为真时需要执行的指令。在您的情况下,您正在执行的指令似乎是针对条件不再为真时执行的指令。如果您只想在变量高于某个值时编写消息,则应该使用
if
声明

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

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

if (reg >= 50) {
  cout << "I can't take more." << endl;
}
我想补充的是,for
-循环的
应该包含在条件为真时需要执行的指令。在您的情况下,您正在执行的指令似乎是针对条件不再为真时执行的指令。如果您只想在变量高于某个值时编写消息,则应该使用
if
声明

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

难道你没有设置限制,为
循环查找
的语法。你没有设置限制,为
循环查找
的语法。啊,谢谢,现在有意义了,而且任何建议都会很好!@Mike:希望你注意到“一本好书”部分是由专业C++程序员维护的推荐书目的链接。))谢谢,现在有意义了,当然任何建议都很棒。一部分是由专业C++程序员维护的推荐书目链接。谢谢!简单的错误,很高兴你能帮我。条件<代码> ReG+Reg <代码>将评估为<代码> Rebug < /代码>如果<代码> ReG> <代码>是代码> 0 < /代码>;谢谢!简单的错误,很高兴你能帮助我。条件>代码> ReG+Reg < /代码>如果
reg
0.0
;则计算为
false