2017-03-07 11 views
1

私は行列を持っているプロジェクトに取り組んでいます。文字を上下左右に動かすことで行列を処理しています。私は文字配列に動きを保存しています。今、私はそれが他の移動が実行された後、マトリックスの最後の10状態だけを印刷したいと思います。しかし、私は他の動きをプリントすることを望んでいません。ちょうどマトリックスの最後の10の状態です。Cのコードの一部をスキップするプリプロセッサ

だから私はこのような動きをループしています:

int i = 0; 
for (; i < strlen(movesArray); i++) { 

    operation = movesArray[i]; // move 

    switch (operation) { 
     case 'v': // process the moves 
    } 

それから私はこのような何かまだforループ内ながら:どこのように、それはすべての動きを印刷しているが

#ifdef NDEBUG // but this printing every state from 1 to 99 
    if(i >= strlen(movesArray) - 10) 
     printf("%s %d:\n", "Move", i); 
     print(matrix); 
#endif 

を私は今のところ最後の10人だけを望んでいます。誰も私を正しい方向に導くことができますか?私は今、数時間それをしています。

もし私が99の動きを持っていれば、それはすべての動きを実行するはずですが、マトリックスの最後の10個の状態を印刷するだけで、マトリックスで行われた動きを含めるべきです。

私は-Dフラグでプログラムをコンパイルします。

答えて

3

ifに中括弧はありません。それをこのように考える:

if(i >= strlen(movesArray) - 10) 
    printf("%s %d:\n", "Move", i); // No curly braces means only the statement after the 
            // if is part of the conditional, in this case 
            // thats this one.. 
print(matrix); 

だから、あなたがこれを行う必要があります:業界の

if(i >= strlen(movesArray) - 10) { 
    printf("%s %d:\n", "Move", i); 
    print(matrix); 
} // Everything between the curly braces is part of this conditional. 

プレンティあなたは関係なく、常にあなたが複数の行を持っているかどうかのか、単に中括弧を使用する必要がありますコーディング標準にサブスクライブ1。上に示したように、1行しか追加しませんが、悪いバグを防ぐことができますlike this one

注:これは私の意見であり、要件は暗示されていません。あなたは、両方がprintf文でタブ付きと仮定しているように見える

2

は条件付きif(...)の制御下にある、彼らはあなたが以下のように中括弧を追加する必要が

C.

ではありません。コード例では、最初の printfのみが if (...)の制御下にあります。 Cでは、複数のステートメントを含めるには中括弧が必要です。

#ifdef NDEBUG // but this printing every state from 1 to 99 
    if(i >= strlen(movesArray) - 10) 
    { 
     printf("%s %d:\n", "Move", i); 
     print(matrix); 
    } 
#endif 
関連する問題