C 初心者です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tamagokun

C 初心者です

#1

投稿記事 by tamagokun » 12年前

配列の中の{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;
}


derok
記事: 51
登録日時: 12年前

Re: C 初心者です

#2

投稿記事 by derok » 12年前

コード:

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

box
記事: 2002
登録日時: 15年前

Re: C 初心者です

#3

投稿記事 by box » 12年前

tamagokun さんが書きました:

コード:

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

コード:

  int a[]={};
このコードで、配列aがきちんと定義できているとは思えないのですけれど…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

tamagokun

Re: C 初心者です

#4

投稿記事 by tamagokun » 12年前

返信ありがとうございます。

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

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

tamagokun

Re: C 初心者です

#5

投稿記事 by tamagokun » 12年前

解決しました。

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

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: C 初心者です

#6

投稿記事 by みけCAT » 12年前

解決したのでしたら、解決したコードの掲示と解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る