C++ 即使条件为true,If语句的求值也为false

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 }

即使计数器是4,我的程序也会跳过if语句
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语句,它将不会改变程序的行为)很高兴它成功了!请立即关闭/删除该问题。没有任何内容解释了您描述的行为,因此无法再现。