为什么如果(a!= 65)没有执行?

时间:2017-12-27 19:35:17

标签: c++ if-statement shellexecute

#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的数字。我怎么能这样做才能打开ONCE如果整个计数它永远不会是65 ...它是否会任何意义?

3 个答案:

答案 0 :(得分:4)

这段代码错误很多:

    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");
    }

要修复代码,修改程序的逻辑只需使用flag:

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");
}

答案 1 :(得分:2)

如果你想知道循环中的所有数字是否都不是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");
}

答案 2 :(得分:0)

我认为您已经弄清楚了语法的问题,因此我将专注于算法的高级问题。

您不需要循环来确定按3计算是否会打印65.这可以通过简单的数学运算完成:当您从a开始计数到z x时如果n除以(n-a)时没有产生余数,你会点击x

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

这假设数字az位于n的相对位置。

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

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

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

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