2016-03-03 1 views
8

5を入力すると、このループは5回実行されますが、6回実行されています。何が問題ですか?ループがCで指定した以上に動いていますか?どうして?

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d ",&size); 
     arr = (int*) malloc(size * sizeof(int)); 
     for(i = 0; i < size; i++){ 
      scanf("%d ", &arr[i]); 
     } 
} 
+0

ループの前にサイズの値をチェックしましたか? – matt

+0

はい、チェックしました。@ matt –

+2

ループscanfで%dの後に空白を削除してみます。 –

答えて

23

ループで使用されているscanf()書式文字列から末尾のスペースを削除します。

空白でないものが見つかるまで、int%d)を読み取った後、scanf()はすべての空白を破棄します。ループの5番目の反復では、scanf()intとなり、空白以外のものが見つかるまで続行します。これは、もう1つの整数を読み取る必要があるという錯覚を与えます。

scanf()の最後の呼び出しでは、整数データの後に空白以外の文字があれば、読み込みが終了します。

7

ここにスペースを削除します。

この:

scanf("%d ",&arr[i]); 
     ^

は次のようになります。

scanf("%d",&arr[i]); 
+1

はい、動作しています。しかし、何が問題なのですか? –

+1

これはかなり複雑な['scanf'](http://www.cplusplus.com/reference/cstdio/scanf/)に関連しています。今は気にしないでください。 –

+1

私は行くことができるように私にソースを与えてくださいできますか? @ Michael Walz –

0

私も同様の問題に直面しました。完全にするには、ループ内に%dの後に スペースを削除してください。それは動作するはずです。 scanfの一部のプロパティかもしれません。

int main(){ 
     int i, *arr, size; 
     printf("Please enter the Number: "); 
     scanf("%d",&size);// Note the change here 
     arr= (int*) malloc(size * sizeof(int)); 
     for(i= 0;i < size;i++){ 
      scanf("%d",&arr[i]); 
     } 
    } 
+1

しかし、何が問題なのですか?あなたは説明していただけますか? –

+0

@Cool Guy誰かがコードを編集しました。今は適切です。 –

関連する問題