1. ホーム
  2. c++

[解決済み] forループ内で'Else without previous if'エラーが発生するのはなぜですか?

2022-02-19 10:47:19

質問

私はC++の初心者で、しばらく自分の(おそらくひどい)コードを見つめていたのですが、どこがおかしいのかが分かりません。

私はif文とelse文の繰り返しの中でループしようとしていますが、何か文法的に正しくないことをしているのでしょう - コンパイラが「前のifがないelse」というエラーを表示するので

これは授業で使うもので、何とかしようと思っているのですが、もし私が見落としているような明らかなものを見つけたら、ぜひ教えてください。

ありがとうございました。

for (i = 0; i < iterationsNum; i++){
if (charlieAlive == 0) // Aarron's shot
        {
        if (aaronShot() == 1)
        charlieAlive = 1;
        }       
else (charlieAlive == 1 && bobAlive == 0);{         
        if (aaronShot() == 1)
        bobAlive = 1;
        }
else (charlieAlive == 1 && bobAlive == 1 && aaronAlive == 0);{
        cout << "Aaron is the Winner!\n";
        totalShot++;
        aaronCounter++;
        }
continue;



if (charlieAlive == 0 && aaronAlive ==0) // Bob's shot
        {
        if (bobShot() == 1) 
        charlieAlive = 1;
        }
else (charlieAlive == 1 && aaronAlive == 0);{
        if (bobShot() == 1)
        aaronAlive = 1;
        }
else (charlieAlive == 1 && aaronAlive == 1 && bobAlive == 0);{
        cout << "Bob is the Winner!\n";
        bobCounter++;
        totalShot++;
        }
continue;


if (charlieAlive == 0 && bobAlive == 0) // Charlie's shot   
        {
        bobAlive = 1;
        }
else (charlieAlive == 0 && bobAlive == 1 && aaronAlive == 0);{          
        aaronAlive = 1;
        totalShot++;
        }
else (charlieAlive == 0 && bobAlive == 1 && aaronAlive == 1);{
        cout << "Charlie is the Winner!\n";
        }
continue;

解決方法は?

else は何の条件も取らないのに、こう書いてある。

else (charlieAlive == 1 && bobAlive == 0);  //else : (notice semicolon)

というのは、あなたの意図したとおりにならないのです。

トを行いたいのですね。

else if (charlieAlive == 1 && bobAlive == 0)  //else if : (semicolon removed)

その違いに注目してください。

また、最大で1つの else ブロックに関連付けられ if ブロック または if, else-if, else-if ブロックを作成します。つまり、こう書けばいいのです。

if (condition) {}
else {}

または

if (condition0) {}
else if (condition1) {}
else if (condition2) {}
else if (condition3) {}
else if (condition4) {}
else {}

いずれにせよ else ブロックは 常に は最後のブロックです。その後、もし別の else というブロックがあると、エラーになります。

それとは別に、セミコロンの位置も間違っています。これも修正しました。

else (charlieAlive == 1 && bobAlive == 0); <---- remove this semicolon!

お役に立てれば幸いです。


C++の入門書として良い本を選んでください。ここでは、すべてのレベルの方にお勧めの本をご紹介します。