2017-12-27 4 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と等しくない場合にのみプログラムを開くようにしたいと考えています。なぜelse(a!= 65)が実行されていないのですか?

プログラムは1から100までカウントされます。 a = a + 3ここで "a"は1に等しい。それが100に数えられる間、 "a"が決して65に等しくないならば、それは "devenv"を開く。しかし、私がやったやり方では、 "devenv"は65に等しい数にはなりません。どのようにすれば65歳にならなかったとしても、それを開くことができます。どんな意味ですか?

+9

質問に関連していないものを無視するように指示するのではなく、無関係な詳細を省略してください。その機能は呼び出されておらず、意図的にそこに置かれ、それに特別な注意を引くことは本当に不条理です。 – tadman

+1

'if'の分岐が起動する唯一の方法は、' a'が '65'と等しくない場合です。したがって、そこに反対の条件を持たせることは冗長です。 – tadman

+0

だから、もし私が他人を必要としないと言っているのですか? – smartonion

答えて

4

このコードは間違って多くの方法である:

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

すべてのセミコロンの最初ifは、それがNOOPになり、あなたのelseを終了した後になるようにコードを書くための複雑な方法である:

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

はちょうど二if完全に削除します。

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

私はあなたが問題を抱えたを考え出していることを前提としています。あなたのプログラムのロジックを修正するために、あなたのコードを修正する

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

だけのフラグを使用します構文については、アルゴリズムの高度な問題に集中します。

3でカウントすると、これは簡単な計算で行うことができます65を印刷するかどうかを判断するためにループを必要としません:あなたはxによってaからzにカウントを開始するとき(n-a)にするとき何の残りを生成しない場合、あなたはnを打つだろうxで割った:

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

これは数字aznの反対側にあることを想定しています。単一のパラメータは、あなたが条件式として、あなたの電話を書き換えることができ、あなたの条件付き制御ので

:あなたはC++でboolが整数型であることを思い出した場合、

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

また、あなたは条件付きなくすことができます。

array<string,2> prog {"mspaint", "devenv"} 
... 
StartProgram(prog[see65]); 
関連する問題