

以下のように作成したのですが、端末が次のような状態で停止してしまいました。

[code]

    /*
      ex1402.c
    */
    
    #include <stdio.h>
    
    void reverseIntArray(int a[], int size)
    {
      int i,t;
      for(i=0;i<size/2;i=i+1) {
        /*a[i]とa[size-1-i]を交換*/
        t=a[i];
        a[i]=a[size-1-i];
        a[size-1-i]=t;
      }
    }
    
    
    void readIntArray(int a[], int size)
    {
      int i;
      for(i=0;i<size;i=i+1) {
        printf("%d番目?",i=i+1);
        scanf("%d ",&a[i]);
      }
    }
    
    void printIntArray(int a[], int size)
    {
      int i;
      for(i=0;i<size;i=i+1) {
        printf("%d ",a[i]);
      }
      printf("\n");
    }
    
    int main(void)
    {
      int data[100], size;
    
      printf("n=? ");
      scanf("%d", &size);
    
      readIntArray(data, size);
      printIntArray(data, size);
      reverseIntArray(data, size);
      printIntArray(data, size);
    
      return 0;
    } 
    
[/code]

端末：

[code]

    $ cc ex1402.c
    $ ./a.out
    n=? 10
    1番目?1
    
[/code]

端末にエラーが出なかったので、どこが間違っているのかもわかりませんでした。  
どうすればいいでしょうか?

ちなみに、実行例はこのようになれば良いみたいです。

[code]

    $ ./a.out
    n=?　10
    0番目?　　1
    1番目?　　2
    2番め?　　3
    3番目?　　4
    4番目?　　5
    5番目?　　6
    6番目?　　7
    7番目?　　8
    8番目?　　9
    9番目?　　10
    1　2　3　4　5　6　7　8　9　10
    10  9　8　7　6　5　4　3　2　1
    
[/code]


CC BY-SA 4.0
2019-11-04T03:56:33.070
60235
2019-11-05T15:36:14.890
2019-11-04T04:23:50.773
36412
question
c
要素を逆順に格納する手続きについて

[code]

    for(i=0;i printf("%d番目?",i=i+1);
    
[/code]

の最後のセミコロンがあると、このfor文はこれだけをループします。  
`scanf("%d ",&a[i]);` を繰り返したい場合はfor文の最後のセミコロンは削除してください。  
できれば `{}` で囲む方がいいですよ。

[code]

    for(i=0;i printf("%d番目?",i=i+1){
        scanf("%d ",&a[i]);
    }
    
[/code]

みたいに。


CC BY-SA 4.0
2019-11-04T04:10:37.110
60236
2019-11-04T04:22:33.903
2019-11-04T04:22:33.903
3060
24490
60235
answer

[code]

        scanf("%d ",&a[i]);
    
[/code]

原因は`scanf()`の形式文字列で、`"%d "`を`"%d"`にすれば先に進めるようになると思います。

`"%d
"`を指定したとき、数値のあとに空白を入れれば先に進めそうに思えますが、`scanf()`の数多くある罠の一つで、形式文字列中の空白に対しては空白の後に空白以外の文字が入力されるまで入力が終わりません。ですので、「`1
a`」などと入力すれば先に進めるのですが、そうすると最後の「`a`」は消費されないので次の`scanf()`で困ることになります。


CC BY-SA 4.0
2019-11-04T22:43:44.237
60250
2019-11-05T15:36:14.890
2019-11-05T15:36:14.890
3475
3475
60235
answer