C++ 如果(a!=65)没有执行,为什么还要执行其他操作?

C++ 如果(a!=65)没有执行,为什么还要执行其他操作?,c++,if-statement,shellexecute,C++,If Statement,Shellexecute,这是我编写的代码,我对编程还是新手。请忽略无效的noret部分。代码完全正常工作,但如果是!=65,我只想让它在不等于65的情况下打开程序 程序从1到100计数。a=a+3,其中a等于1。当它计数到100时,如果a永远不等于65,它将打开devenv。但我这样做的方式使得devenv将开放给不等于65的数字。如果在整个计数过程中,它从未达到65,我如何才能使它只打开一次。。。这有什么意义吗 如果想知道循环中的所有数字是否都不是65,则需要记住在循环中是否看到65: #include <io

这是我编写的代码,我对编程还是新手。请忽略无效的noret部分。代码完全正常工作,但如果是!=65,我只想让它在不等于65的情况下打开程序


程序从1到100计数。a=a+3,其中a等于1。当它计数到100时,如果a永远不等于65,它将打开devenv。但我这样做的方式使得devenv将开放给不等于65的数字。如果在整个计数过程中,它从未达到65,我如何才能使它只打开一次。。。这有什么意义吗

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

#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;

}

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

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后面的分号使其成为noop并终止else,这样代码就以复杂的方式编写:

    if (a == 65)
    {
        StartProgram("mspaint");
    }
    else if (a != 65);
    {
        StartProgram("devenv");
    }
只需完全移除第二个:

    if (a == 65)
    {
        StartProgram("mspaint");
    }
    StartProgram("devenv");
要修复代码,修复程序逻辑,只需使用标志:

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

我假设您已经解决了语法方面的问题,因此我将集中讨论算法的高级问题

您不需要循环来确定按3计数是否会打印65。这可以通过简单的数学来完成:当你开始从a到z乘以x时,如果n-a除以x时不产生余数,那么你会碰到n:

这假设数字a和z位于n的两侧

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

bool see65 = (65-1) % 3 == 0;
< >此外,如果您还记得C++中的布尔是一个整数类型,则可以排除条件:

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

不要告诉我们忽略与问题无关的事情,而是忽略任何不相关的细节。这个函数没有被调用,故意把它放在那里,然后引起特别的注意,这真的很荒谬。if分支的唯一方法是如果a不等于65,所以在那里有相反的条件是多余的。那么你是说我不需要else-if吗?你不需要else后面的if部分。如果a!=65; 分号是一个完整的语句。因此,尽管有缩进,它下面的块将对a的任何值执行。
StartProgram(see65  ? "mspaint" : "devenv");
array<string,2> prog {"mspaint", "devenv"}
...
StartProgram(prog[see65]);