2017-12-27 968 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]); 
相關問題