2016-12-24 5 views
0

デバッガを使用している間に以下のコードを実行しようとしています。次のループ "for (i=0;i<n;i++) pin[i]=0;"の終わりで、nの値は私が与えた値から0に変わります。なぜそれが起こるのか理解できないので、なぜ起こったのかについてのあなたの助けには大いに感謝します。ああ、もう一つのこと。私がそれを無視し、nに値を与えた直後に、その値を別の整数に代入し、nが0になったときにそれを使用できるようにするために、プログラムがクラッシュします。たとえば、値を割り当てていない変数を使用しているときなどに発生するタイプのクラッシュです。整数の値がどこからも変わります

main() 
{ 
    int i,j,k,n,pin[n]; 
    printf("Give the size of the array:\n"); 
    scanf("%d", &n); 
    do{ 
     printf("Give the number of the iterations:\n"); 
     scanf("%d", &k); 
    }while (k<1||k>n); 
    for (i=0;i<n;i++) 
     pin[i]=0; 
    for (j=0;j<k;j++){ 
     for (i=0;i<n;i++){ 
      if (i%j==0){ 
       if (pin[i]==0) 
        pin[i]=1; 
       else 
        pin[i]=0; 
      } 
     } 
    } 
    for (i=0;i<n;i++) 
     printf("%d ", pin[i]); 
} 
+1

もし 'ピン[n]を'定義するときN 'が初期化されていないされている 'ので、コードは未定義の動作を示します。 'pin'の定義をさらに下に移動し、' n'を入力して検証するループを過ぎてください。 –

+1

あなたのタイトルは、どこからでも未定義の動作が発生したことを示しています。あなたはマシンが無作為に何かをしていることに困惑しています。残念ながら、これは主に、あなたが望むものと何をするべきかとの間に相違があるためです。デバッガは、後者を前者に準拠するまで解析するのに役立ちます。みんなメリークリスマス。 –

+0

イェップ、それは、ありがとう! – Achilles

答えて

1

あなたが0で除算し、nが初期化されpin[n]を定義してはなりません。

#include <stdio.h> 

int main() { 
    int i, j, k, n; 
    printf("Give the size of the array:\n"); 
    scanf("%d", &n); 
    int pin[n]; 
    do { 
     printf("Give the number of the iterations:\n"); 
     scanf("%d", &k); 
    } while (k < 1 || k > n); 
    for (i = 0; i < n; i++) 
     pin[i] = 0; 
    for (j = 0; j < k; j++) { 
     for (i = 0; i < n; i++) { 
      if (j != 0 && i % j == 0) { 
       if (pin[i] == 0) 
        pin[i] = 1; 
       else 
        pin[i] = 0; 
      } 
     } 
    } 
    for (i = 0; i < n; i++) 
     printf("%d ", pin[i]); 
} 

テスト

Give the size of the array: 
3 
Give the number of the iterations: 
2 
1 1 1 

試験2

Give the size of the array: 
5 
Give the number of the iterations: 
4 
1 1 0 0 0 
+0

アドバイスをいただきありがとうございます!コードはスムーズに実行されます! – Achilles

関連する問題