2016-12-30 8 views
-2

私はforループのために動作していないプログラムを持っています。私はここでのコードの作業スニペットを貼り付けています:なぜこのプログラムは出力を出さないのですか?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int numLoop = 19; 
    int counter; 
    int maxloops = 25; 
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 

    for (counter=1; counter==maxloops; counter++) 
    { 
     printf("%d \n", counter); 

     if (counter == numLoop) 
     { 
      break; 
     } 

     if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
     { 
      counter++; 
      continue; 
     } 
    } 

    return 0; 
} 

予想される出力は次のようになります。1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

何も印刷されていません。

+0

あなたはすべての警告&デバッグ情報でコンパイルする必要があります( 'gccの-Wall -Wextra -g' ... [GCC](http://gcc.gnu.org/)を使用している場合)、あなたのコードを改善警告が出なくなるまでデバッガ**( 'gdb')を使います。 'for'ループが間違っています。 –

+0

あなたの* fix-my-code *質問はここで話題にはなりません。 –

+1

これまでの調査/デバッグの取り組みを示してください。まず[Ask]ページをお読みください。 –

答えて

6

forループ状態がバグです。 counter==maxloopsの代わりにcounter != maxloopsと書きます。

ループ条件が満たされず、ループ本体がまったく実行されません。あなたの要件ごとに、言っ

  1. あなたは無条件印刷を避けるためにprintf()文の前にチェックブロック

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
        counter++; 
        continue; 
    } 
    

    に移動する必要があります。あなたは出力が19に限定することにしたいよう

  2. forループ条件は本当に

    for (counter=1; counter < numloop; counter++) 
             ^^^^^^^^^^ 
    

    のようになります。

+0

こんにちは、私はしようとしましたが、うまくいきませんでした –

+0

上記のコメントのためにお詫び申し上げます。私のスニペットはそれで動作しましたが、私の元のプログラムはそうしませんでした。非常に混乱のために申し訳ありません。 –

+2

@ MyyicCocoaその場合、MCVEを作成する必要があります。 –

1

ロジックを確認する必要があります。 出力が最大19反復である必要がある場合。また、カウンターを印刷する前に内側の条件をチェックする必要があります。

下記の疑似コードをサンプルします。

for (counter=1; counter<=numLoop; counter++) 
{ 
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
     continue; 
    } 
printf("%d \n", counter); 

} 
1

私はここで教えることができる瞬間を利用したいと思います。これは、forステートメントの句を誤解するという単純な問題のようです。 forステートメントは、whileループを作成するための簡単な方法です。forステートメントには、括弧で囲まれたリストに3つの句((init ; while ; after))があります。それでは、あなたが見ることができるように上記forループが

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

としてwhileループを使用して書き換えることができ

for(i = 0 ; i < 10 ; i++) 
    { 
    do_something(); 
    } 

として書かれているfor文としてと例使用してみましょう、forは、より多くのですコンパクト。

+0

私は2番目の句の意味を誤解していました:P –

1

バディウルコードがすべて乱れているように見えます。ループの概念を理解する。 forループで私に耳を傾ける。

Uは論理的に間違った状態を保っています。 ループは状態をチェックします。そして、カウンターがmaxloopと等しくなければならない。これは、コードが19の値に達するとコードが終了する(カウンタが19に達するとブレークが与えられる)ので、urコードでは決して満たされない。希望は最初の部分を解決する。

第2に、値を表示した後にループが壊れることに注意してください。明確な理解のために、以下のコードを与えました。これが助けてくれるといいですね。

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int numLoop = 19; 
int counter; 
int maxloops = 25; 
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 
for (counter = 1; counter <= maxloops; counter++) 
{ 
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
{ 
continue; 
} 
printf("%d \n", counter); 
if (counter == numLoop) 
break; 
} 
getchar(); 
return 0; 
} 
+0

正しい英語を使用してください。 –

+0

@BobJarvisこの行為を犯罪とみなさないでください。私はそれが告発の正当な根拠だとは思わない。彼らの背景(英語は母国語ではありません)のため、英語ではあまり肯定的ではありません。彼はインド出身のようです(多くの人が英語に精通していないので、私は個人的な経験から話します)。 –

関連する問題