这个bool变量如何正常工作?

Har*_*aru 2 c++ boolean

我是编程新手,所以如果我的问题太基础,请原谅我.

对于以下代码,我不知道bool变量"more"的工作原理.它表示while循环将在"more"为真时执行循环的内容,但是

  1. 计算机如何知道更多是真的?当用户通过键盘输入额外的价值时,知道"更多"的字面意思是否足够聪明?此外,它是否知道负输入不被视为"更多",但只有正输入被认为是"更多"?
  2. 在while循环中,当输入值为0时,它表示更多是false.但是,当它已经通过while循环时,它在逻辑上没有意义,因为只有在more为真时才运行!
  3. 我了解到,当"总是如此"时,我们将获得无限循环.似乎while循环将永远为真,因为more = true.

请帮我解决这个问题!!

vector<double> salaries;
cout << "Please enter salaries, 0 to quit:" << endl;
bool more = true;
while (more)
{
  double s;
  cin >> s;    
  if (s == 0)
    more = false;
  else
    salaries.push_back(s);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*m B 5

好的,一点一点地说:

1)编译器知道这more是真的,因为在第3行它说:

bool more = true;
Run Code Online (Sandbox Code Playgroud)

这会创建bool more并赋予它值true.

2)more然后设置falseif s等于zero.尽管more在循环开始时是正确的,但没有什么可以说它在循环内不能被改变(这称为可变性).

3)因为more在循环中将gets设置为false,循环将停止执行.只有在有人输入0输入时才会发生这种情况.如果没有发生这种情况你是对的,循环将永远运行.

这是一个相当常见的while循环结构,它允许将任意数量的值添加到向量中salaries.在你的问题中,你暗示不应该允许正数,值得注意的是,代码中没有任何内容强制执行此操作.也许改变这条线会更好:

if (s == 0)
Run Code Online (Sandbox Code Playgroud)

至:

if (s <= 0.0)
Run Code Online (Sandbox Code Playgroud)

这样,如果0输入值输入负值,循环将停止执行.


Ren*_*ger 5

(1):计算机(或编译器)不够智能,无法连接more到字面意思.

(2):more可以在循环内部进行更改,这是您输入时发生的情况0.更改more为之后false,while (more)重新评估条件.由于more现在是假,退出循环.

(3):不,more并非总是如此,见(2).

  • 是的,我想OP需要理解`while(more)`中的条件在循环的每次迭代中都会被重新评估. (3认同)