即使我设置了限制,我的 for 语句也会不断重复

My for statement keeps repeating even though I set a limit?

本文关键字:语句 for 我的 设置      更新时间:2023-10-16

即使我设置了限制,我的 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;
}  
这不是

for的工作方式。它:

for (initial statement; condition; iteration operation)

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

在您的情况下,初始语句是 reg >= 50 ,它什么也不做,条件是reg+reg,只有当reg+reg以某种方式评估为 false 并且没有操作时,条件才会为 false。

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

for(initialization; condition; increment-code)是for循环的工作方式(注意:所有三个部分都是可选的)。如果condition true,则继续循环。你把它混在一起,写成for(condition; increment-code; *empty*).请注意,您的状况似乎相反。此外,您的递增部分实际上并没有更新reg,您将其添加到自身并丢弃结果。

正确的代码是

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

另请注意,您的if陈述似乎非常虚假。

if (reg> glass && met)

首先,请在二进制操作周围放置一个空格。接下来,这将仅测试IFT大于glass reg以及met是否为非零值。要测试reg是否大于glass又大于met,您必须明确执行此操作两次:

if(reg > glass && reg > met)

我可以推荐一本好书吗?

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

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

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