ページ 11

C 初心者です

Posted: 2013年7月01日(月) 00:36
by tamagokun
配列の中の{0}の数字を一番最後にもっていくプログラムを作りたいです。
例 {2,0,3}→{2,3,0}
{2,5,0,2,0,5}→{2,5,2,5,0,0}のようにしたいのですが配列の個数が3個のとき,7個のときの表示が上手くいきません。
どうしてでしょうか? ご教授お願いします。

コード:

#include <stdio.h>

int main()
{
  int m,i,k,j;
  int a[]={};
  m=sizeof(a) / sizeof(a[0]);
  printf("m=%d\n",m);
  for(i=0; i<m; i++)
    {
    //  printf("i=%d\n",i);
      for(j=0;j<m;j++)
	{
	  if(a[j]==0)
	    {
	      k=a[j+1];
	      a[j+1]=a[j];
	      a[j]=k;
	    }
	 }
     }
  for(i=0;i<m;i++)
    {
      printf("配列の中身は%d\n",a[i]);     
    }
  return 0;
}


Re: C 初心者です

Posted: 2013年7月01日(月) 02:09
by derok

コード:

 k=a[j+1]; 
jが配列の一番最後のとき、
j+1は配列の外にあるため、何が入っているのか分かりません。
それを無理矢理コピーしているのでおかしくなっています。

Re: C 初心者です

Posted: 2013年7月01日(月) 07:40
by box
tamagokun さんが書きました:

コード:

  int a[]={};
  m=sizeof(a) / sizeof(a[0]);
  printf("m=%d\n",m);
mの値はいくつになっていますか?
tamagokun さんが書きました:

コード:

  int a[]={};
このコードで、配列aがきちんと定義できているとは思えないのですけれど…。

Re: C 初心者です

Posted: 2013年7月01日(月) 09:38
by tamagokun
返信ありがとうございます。

>>derokさん
ではこのようなプログラムはどのように書けばいいのでしょうか ヒントをお願いします。m(--)m

>>derokさん
int a[]={この中身は任意の数字です。}
説明不足ですいません。

Re: C 初心者です

Posted: 2013年7月01日(月) 09:44
by tamagokun
解決しました。

ありがとうございました!!

Re: C 初心者です

Posted: 2013年7月01日(月) 21:48
by みけCAT
解決したのでしたら、解決したコードの掲示と解決チェックをお願いします。