以下で説明する問題のいくつかを誰かが「修正」しました。YMMV。
コードにはいくつかの重大な問題があります。構文および/またはセマンティックエラーの組み合わせは、互いに複合する可能性があります。まず、あからさまな構文エラーを修正することから始めます。
1. for 構文が間違っています。
for
ループ ステートメントの最初の「部分」は、初期化ステートメントでなければなりません(「代入」と読みます)。任意の式にすることはできません。構文は次のとおりですfor(initialization; termination; increment) statement
。詳細については、リンクを参照してください。
コードは次のようになると思います。
for(/* At the start, LET e = 2 */
e = 2 ;
/* Terminate when this is false. */
e < (phiPQ - 1) ;
/* no increment */) ..
または:
for(e = 2; e < (phiPQ - 1) ;) ..
(または、e
for ループの上に 2 を代入し、空の初期化ステートメントを提供します。)
2. コメントで識別されるように、コードは次と同等です。
// This is a loop with AN EMPTY STATEMENT FOR A BODY due to the
// immediately trailing semicolon.
// Even when this loop is corrected per above, the condition will never
// change state due to lack of increment and it will "loop forever".
for(e > 2; e < (phiPQ - 1);) ;
// This is a new block, that does NOT BELONG to the loop above.
{
int larger = phiPQ;
int smaller = e;
int r = 1;
r = larger / smaller;
larger = smaller;
smaller = r;
}
これを修正するには、ステートメントの;
直後にあるを削除します。for
3. ループは決して状態を変更しません。
終了条件は と に依存しe
ますphiPQ
。ただし、これらの変数は決して変更されないため、ループがループすることも、正常に終了することもありません。
ループの終了条件と状態の進行を確認します。
4. for 文の外break
で使用されています。
#3はコードが決して終了しないことを主張していますが、 (ループ構造の外側に誤って配置され、構文エラーになります)if
を含むステートメントがループを終了することを意図している場合があります。この場合は、ループ本体内にある必要があります。break