2017-12-27 967 views
-4
#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.为什么如果(a!= 65)没有执行?

程序计数从1到100。 a = a + 3其中“a”等于1.虽然它计为100,但如果“a”永远不等于65,它将打开“devenv”。但是我这样做的结果是,“devenv”的数量可能不等于65.我怎么能这样做,以便它一旦开始计数,它就会开放一次......它是否会使任何意义?

+9

不要让我们忽略与问题无关的事情,而应该忽略任何不相关的细节。这个函数没有被调用,故意把它放在那里,然后特别关注它,这实在是荒谬的。 – tadman

+1

'if'的分支将会触发的唯一方法是如果'a'不等于'65',那么在那里有相反的条件是多余的。 – tadman

+0

那么你是说我不需要别的东西? – smartonion

回答

4

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

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

首先分号if使得空操作,并终止您的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"); 
} 
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"); 
} 
0

我假设你已经想通了与问题你的语法,所以我将专注于算法的高级问题。

你并不需要一个循环,以确定是否由3计数将打印65.这可以用简单的数学来完成:当你开始通过xa计数到z,你会打n如果(n-a)没有余数时,通过x分为:

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

这假定数字az上的n的相对侧上。

由于您的条件控制一个参数,可以通过改写呼叫作为条件表达式:

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

此外,如果记得bool在C++是整体型,可以消除条件:

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