2017-06-13 11 views
0

誰かが問題を見つけることができますか?これはシンプルなCプログラムです。 11,12,13を印刷することになっていますが、印刷しません。どうして? ありがとう!Cプログラムでエラーが発生する

改行に遭遇したときに出力がバッファリングされる可能性がありますし、端末になりますのみ出力
#include<stdio.h> 
#include<conio.h> 

void main() 
{ 
    int no[4]={11,12,13,14}; /* An array containing 4 numbers */ 
    int num[4]; 
    int count=0; 
    int p; 
    int s=1; 
    char c='y'; 

    for(int j=0;j<=3;j++) 
    { 
     p=no[j]; 

     for(int n=s;n<=3;n++) 
     { 
     if(p!=no[n]) c='n'; /* If not equal*/ 
     } 
     if(c=='n') 
     { 
     num[count]=p; 
     s=s+1; 
     count=count+1; 
     } 
    } 
    printf("%d %d %d",num[2],num[1],num[3]); 
    getche(); 
} 
+0

は、スタックオーバーフローへようこそ!これまでのところあなたの研究/デバッグ作業をうまく示してください。まず[Ask]ページをお読みください。 –

+3

3を明示的に印刷するだけで、どのように4つの数字を印刷すると思いますか? –

+1

'for(int n = s; j <= 3; j ++)'についてあなたは確かですか?それとも、(int n = s; n <= 3; n ++) 'を意味しましたか? –

答えて

0

c stdout print without new line?

どちらかあなたのprintffflush(stdout);を呼び出すか、行全体を印刷:

printf("%d %d %d\n",num[2],num[1],num[3]); 
+0

これは一般的に正しいですが、答えはここではありません。 –

0

私が見る主な問題は、

if(c=='n') 
    { 
     num[count]=p; 
     s=s+1; 
     count=count+1; 
    } 
ですブロック

。条件付きでnum[i]を割り当てています。条件が満たされない場合は、不定値を含む未初期化メンバーにアクセスします。これはundefined behaviorにつながります。少なくとも自動ストレージを持つローカル配列を初期化する必要があります。

Alo、もう1つの問題as already mentioned in @CKT's answerは、外部変数と内部ループコントロールの両方に同じ変数jを使用しています。ここで何が起きるのかは、外側ループの最初の反復であり、内部ループは実行し、jをインクリメントし、内側ループの反復が終了した後、制御は外側ループ制御にジャンプし、制御変数が既に変更されているため、内側のループインクリメントステートメントによって。

したがって、ターゲット配列メンバーは未初期化のままです。内側ループと外側ループに別々のループ制御変数を使用する。

0

内側のforループでは、jをインクリメントしているので、outer forループは1回だけ実行され、num配列には迷惑な値が入ります。

利用コード:

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
    int no[4]={11,12,13,14}; /*An array containing 4 number*/ 
    int num[4]; int count=0; 
    int p;int s=1; char c='y'; 
    for(int j=0;j<=3;j++) 
    { 
     p=no[j]; 

     for(int n=s; n<=3; n++) 
     { 
     if(p!=no[n]) c='n'; /* If not equal*/ 
     } 
     if(c=='n') 
     { 
      num[count]=p; 
      s=s+1; 
      count=count+1; 
     } 
    } 
    printf("%d %d %d",num[2],num[1],num[3]); 
    getche(); 
} 

また、4番目の数字の使用を印刷するために使用すべき

printf("%d %d %d %d",num[2],num[1],num[3], num[0]); 
+0

3枚印刷されます。それは大丈夫です。しかし、内部ループ(j)の完了後、制御は外部ループに戻るべきです。しかし、それは起こっていません。 –

+0

"for(int n = s; n <= 3; n ++)"を内側のループに使用すると、それが実行されます。私が提供したコードを実行すると、出力として "13 12 14"が返されます。 – CKT

+0

CKTと皆様におかげさまで、ありがとうございます。私は意図的に内部ループに間違った変数を置くので、私はCに新しいです。私は配列から重複数を削除するために働いていた。そして、私の知識をこの問題に適用するのは私の第一歩でした。みなさん、もう一度ありがとう。将来も助けを求めることを願っています。 –

関連する問題