我是编程新手,所以如果我的问题太基础,请原谅我.
对于以下代码,我不知道bool变量"more"的工作原理.它表示while循环将在"more"为真时执行循环的内容,但是
请帮我解决这个问题!!
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)
好的,一点一点地说:
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输入值或输入负值,循环将停止执行.
(1):计算机(或编译器)不够智能,无法连接more到字面意思.
(2):more可以在循环内部进行更改,这是您输入时发生的情况0.更改more为之后false,while (more)重新评估条件.由于more现在是假,退出循环.
(3):不,more并非总是如此,见(2).