【发布时间】:2021-12-31 11:40:02
【问题描述】:
我正在关注这本书,名为C++ Primer Fifth Edition,它有这样的代码:
#include <iostream>
int main() {
int currVal = 0;
int val = 0;
if (std::cin >> val){
int cnt = 1;
while (std::cin >> val){
if (val == currVal){
++cnt;
}
else {
std::cout << currVal << " occurs " << cnt << " times " << std::endl;
currVal = val;
cnt = 1;
}
}
std::cout << currVal << " occurs " << cnt << " times " << std::endl;
}
return 0;
}
这段代码告诉我一个数字在用户输入中出现了多少次。
我还不太明白的是,当我给它一个值 0 时,代码如何知道 currVal 是什么,除了最后一个 else 之外,我没有告诉它任何关于当前值的信息陈述。我的问题是代码是否先运行else 代码然后运行if 语句代码?但随后cnt 将无法计算任何内容,因为它总是在else 语句的末尾重置为1。我知道这是非常基本的,但我就是想不出答案。
我在谷歌上找不到答案,也没有在我的书中解释,所以我想也许我可以在这里问。
【问题讨论】:
-
你可以用你的调试器逐行检查这些代码行,并检查这些值实际上是如何变化的。
-
第二行有currVal = 0?
-
我现在开始理解它,但我感到困惑的是,我没有向
currVal提供有关该值的任何更新,并且不知何故它仍然知道当前值是什么。但我想我现在理解得更好了,我会尝试用调试器来解决它以更好地理解它。 -
应该是
if (std::cin >> currVal ){;此代码仅在第一个输入是0时才有效;val和currVal的初始化也是不必要的...... -
我不确定我的书是这样说的,当我测试它时,它似乎可以双向工作。
标签: c++