[英]c++: What does 'while (cin >> variable, variable)' exactly do?
所以这是那段代码,非常基本,但我找不到任何类似的问题,它们在 while 循环中有两个变量,其中包含 cin。
void Perm(int start, int end, int a[]) {
//some recursion code
}
int main() {
int i, n, a[10];
while (cin >> n, n) {
for (i = 0; i < n; i++)
{
a[i] = i + 1;
}
Perm(0, n, a);
}
return 0;
}
无法弄清楚 while (cin >> n, n) 部分做了什么,什么时候停止。 看起来当我运行代码时,只需要输入一次..
逗号运算符执行逗号左侧的表达式并丢弃结果,然后执行右侧的表达式并提供结果以供测试。 所以,用英语
while (cin >> n, n)
说,从 Standard In 读入 integer n
并丢弃读取是否成功,然后测试n
的值。 如果n
不为零,则进入循环。
对于现代编译器,这一点有点没有实际意义,但我相信它会读起来更好
while (cin >> n && n)
或者在英语中,如果我们成功地从标准 in 读取到 integer n
并且n
不为零,则进入循环。 它更好地传达了意图,但它没有实际意义,因为如果读取失败,截至 C++11 n
将被设置为零并仍然退出循环。 在 C++11 之前,您可能会遇到一个无限循环,永远不断地测试n
的最后一个良好的非零值。
正如下面评论中所探讨的那样,这一点似乎没有实际意义。 似乎在某些情况下,在这种情况下没有给出数据,该值没有被归零。 这里需要更多标准阅读,但看起来好像
while (cin >> n && n)
或类似的需要捕捉所有的情况。
在 while 语句的条件下
while (cin >> n, n) {
我们在那里使用了逗号运算符。
也就是说,表达式由两个子表达式cin >> n
和n
组成,它们按顺序执行。 条件的结果是隐式转换为 bool 类型的第二个子表达式的值。
来自 C++ 17 标准(8.19 逗号运算符)
- ... 一对由逗号分隔的表达式从左到右求值; 左边的表达式是一个丢弃值表达式(第 8 条)。 与左表达式关联的每个值计算和副作用在与右表达式关联的每个值计算和副作用之前排序。 结果的类型和值是右操作数的类型和值;...
while 循环可以等效地重写为
while (cin >> n, n != 0 ) {
写 while 语句的条件会更安全
while (cin >> n, n != 0 && n <= 10 ) {
代替逗号运算符,最好使用逻辑 AND 运算符,例如
while (cin >> n && n != 0 && n <= 10 ) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.