C++ 即使条件为true,If语句的求值也为false
即使计数器是4,我的程序也会跳过if语句C++ 即使条件为true,If语句的求值也为false,c++,c++11,C++,C++11,即使计数器是4,我的程序也会跳过if语句counter==4。当我尝试调试时,它永远不会检查这个if语句,每次都会完全跳过它 int num; int counter = 1; while (file >> num) { if (counter == 1) { //code } if (counter == 2) { //code }
counter==4
。当我尝试调试时,它永远不会检查这个if语句,每次都会完全跳过它
int num;
int counter = 1;
while (file >> num) {
if (counter == 1) {
//code
}
if (counter == 2) {
//code
}
if (counter == 2) {
//code
}
if (counter == 4) { //completely skips this if
counter == 1;
}
counter++;
}
你有这个作品:
if (counter == 4) { //completely skips this if
counter == 1;
}
它不会被跳过(从您发布的代码中可以看到)。这根本没用。将计数器
与1进行比较,然后丢弃得到的布尔值
要修复,请切换到分配,使用计数器=1
编译器应该警告您“代码无效”。打开警告(
-Wall-Wextra
用于gcc和clang,/W3
或/W4
用于Visual Studio都很好),并修复它们。好的,我认为Visual Studio只是有点奇怪。我删去了这句话,重新写了一遍,它成功了。这是迄今为止我遇到的最奇怪的错误lol。您编写了计数器==1
而不是计数器=1
,它将计数器
与1进行比较,并忽略结果,而不是将1分配给计数器
。由于该行是无用的,并且不做任何事情,它可能会被优化掉,这就解释了调试器跳过它的原因。顺便说一句,跳过if语句的可能原因是因为if语句在程序中得到了优化(因为优化器正确地确定,如果删除if语句,它将不会改变程序的行为)很高兴它成功了!请立即关闭/删除该问题。没有任何内容解释了您描述的行为,因此无法再现。