为什么 else if (a != 65) 没有执行?

Why else if (a != 65) is not executing?

#include <iostream>
#include <Windows.h>
using namespace std;

void noret()
{

    for (int i = 1; i < 11; i++)
    {
        cout << "Line number : " << i << endl;
    }

    system("pause");
}

void StartProgram(string filename)
{
    ShellExecute(NULL, "open", filename.c_str(), NULL, NULL, SW_SHOWNORMAL);
}

int main()
{
    for (int a = 1; a < 100; a += 3)
    {
        cout << "The number is: " << a << endl;
        if (a == 65)
        {

            StartProgram("mspaint");
        }
        else if (a != 65);
        {
            StartProgram("devenv");
        }
    }
    system("pause");
    return 0;

}

这是我编写的代码(我还是编程新手)。请忽略 void noret() 部分。代码完全有效,但在 else if (a != 65) 部分,我想让它仅在不等于 65 时打开程序。

程序从 1-100 计数。 a = a+3 其中 "a" 等于 1。当计数为 100 时,如果 "a" 永远不等于 65,它将打开 "devenv"。但是我这样做的方式是 "devenv" 将打开到不等于 65 的数字。如果在整个计数过程中它从来没有达到 65,我怎样才能让它打开一次...这有什么意义吗?

如果你想知道循环中的所有数字是否都不是 65,你需要记住你是否在循环中看到了 65:

auto found65 = false;
for (int a = 1; a < 100; a += 3)
{
    cout << "The number is: " << a << endl;
    found65 = found65 || (a == 65);
}

if (found65)
{

    StartProgram("mspaint");
}
else
{
    StartProgram("devenv");
}

此代码在很多方面都是错误的:

    if (a == 65)
    {
        StartProgram("mspaint");
    }
    else if (a != 65);
    {
        StartProgram("devenv");
    }

首先在 if 之后的分号使它成为 noop 并终止你的 else 这样代码的编写方式就很复杂:

    if (a == 65)
    {
        StartProgram("mspaint");
    }
    StartProgram("devenv");

完全删除第二个 if

    if (a == 65)
    {
        StartProgram("mspaint");
    }
    else 
    {
        StartProgram("devenv");
    }

修复您的代码,修复您程序的逻辑只需使用标志:

int main()
{
    bool found = false;
    for (int a = 1; a < 100; a += 3)
    {
        if (a == 65) found = true;
    }

    if( found ) 
        StartProgram("devenv");
    else
        StartProgram("mspaint");
}

我假设您已经解决了语法问题,所以我将专注于算法的高级问题。

您不需要循环来确定按 3 计数是否会打印 65。这可以通过简单的数学运算来完成:当您开始从 a 计数到 z 时 [=15] =],如果 (n-a) 除以 x 没有余数,您将命中 n

bool see65 = (65-1) % 3 == 0;

这假设数字 azn 的相对侧。

由于您的条件控制单个参数,因此您可以将调用重写为条件表达式:

StartProgram(see65  ? "mspaint" : "devenv");

另外,如果你还记得C++中的bool是一个整数类型,你可以排除条件:

array<string,2> prog {"mspaint", "devenv"}
...
StartProgram(prog[see65]);