2016-11-25 5 views
0
#define LEN 200 
int main() 
{ 
    int arr[LEN],i; 
    for (i =0; i < LEN; i++) 
     while(scanf("%d", arr[LEN]) == 1){ 
      if((arr[LEN] == arr[LEN]+1) || arr[LEN] < 0){ 
      printf("Bad numbers.\n"); 
      } 
      else if(arr[LEN] == 0){ 
       break; 
      } 
     } 
    printf("Break"); 
return 0; 
} 

私のポイントです。しかし、arr[LEN] == 0の場合は、scanfを停止し、数値を配列に保存してから他のものを続行する必要があります。いくつかの数字の後、私のコードがクラッシュした。誰かが私を助けることができますか?アレイとしばらくscanfのクラッシュ

答えて

1
  1. forループ内では、arr[LEN]の代わりにarr [i]を使用する必要があります。実際には、arr[LEN]宣言は、0からLEN-1までの範囲のインデックスを持つ名前arrの配列を作成します。だからarr[LEN]はあなたの配列の範囲外です。
  2. には、arr[LEN]の代わりに&arr[i]を使用する必要があります。
  3. if条件では、入力値が入力されていない次の値ではなく、現在の入力値と前の値とを比較できるので、if(arr[i] == arr[i-1])と記述する必要があります。ただし、i=0の場合はこの条件を別に処理してください。i-1は配列の要素ではないためです。

これらの変更は、コードがすべての値に対してスムーズに機能するようになると思います。 また、すべての配列値が異なることを確認したい場合は、現在の入力値と以前に格納されたすべての値を比較する必要があります。現在の値は直前の値とは異なる可能性がありますが、それ以前に入力された値と似ている可能性があります。

+0

答えを入力するテキストボックスの上のアイコンを試してみてください(いつでも変更をキャンセルできます)。彼らはあなたの壁画を少しでも手間をかけずに読みやすく分かりやすくすることができます。 – Anthon

+0

変換が成功した場合、 'scanf("%d "、&arr [i])'からの戻り値は1です。入力にデータがあるが、データが残っていないか、または何らかのエラーがある場合は、10進整数(たとえば、文字)またはEOF(常に負の値、通常は-1)と一致しない場合は0になりますデバイスは読み取られます。 ['scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)関数は決して入力の長さを返しません。複数の変換指定がある場合、成功した変換の数が返されますが、抑止された代入( '%* d'など)と'%n'は数えられません。 –

+0

あなたが項目4を修正するまで、それ以外の良い答えを投票することはできません。 –

関連する問題