C言語 配列の要素の比較に関して質問です。

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

C言語 配列の要素の比較に関して質問です。

#1

投稿記事 by ruo » 11年前

手づまりになってしまったので、質問させていただきたいと思います。

C言語にて、A、Bという2つの配列を用意し、Aの配列の中身を適当に決め、
Bの配列の中身はrand()を使用してランダムに決め、
AとBの要素を1つずつ比較し、一致した部分を残し、一致しなかった部分は再度
rand()を使用してこれを5個すべて一致するまで繰り返すプログラムを作成したいです。

ソースの一部分ですが、

コード:

		while(count < 5){                             //5個一致するまで                                    
			
		for(i=0;i<5;i++){
		if(B[i] == A[i]){
			C[i] = B[i];
			count = count + 1;      //1つ一致したらカウント+1
			}else{
				C[i] =  rand() % 10;
				}

                                                    for(i=0;i<5;i++){
				printf("%d", C[i]);
			              printf("\n");

}
このようにCという一致したものを格納する配列を用意し作成し、
近づいていく様子がわかるようにBの要素を出力していったのですが、
出力結果はAの要素にまったく近づいていかず、常にランダムの5桁が出力されます。
そしてcountに関しても一致していないのに常にcount+1されてしまいます。
配列の比較の仕方やcountの仕方など正しくない部分についてのアドバイスを
お願いします。

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語 配列の要素の比較に関して質問です。

#2

投稿記事 by usao » 11年前

提示されたコードの前に
・Aの配列の中身を適当に決める
・Bの配列の中身はrand()を使用してランダムに決める
・count=0;
くらいのことが当然なされているんですよね?(確認)


さて,この程度の短さのコードであれば,デバッガを使わないとしても各所にprintf()を挿入して見るとか
あるいは紙とペンを用いてででも処理を追えると思いますので,ぜひそうしてみてください.
各変数がどのように変化していくのかを見れば,何が起こっているかわかるはずです.


>一致しなかった部分は再度rand()を使用して
とは 「何の」部分 であるべきか.
現在,rand()が使われているのはline8のみであり,これだと「C[]」の一部 を書き換えているわけですが
それでOKでしょうか?

現状,6行目を実行するたびにcountが増え続けていくはずです.
countを0に戻すべきタイミングというのがどこかにあるのではありませんか?

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: C言語 配列の要素の比較に関して質問です。

#3

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

①countを適切な場所でリセットしてあげること
②AとBの値が一致していない場合は、Bにランダムな値を入れること
③iの値が変わってしまうので、for文の中にあるfor文を消す

この3つを直すことで、意図した動きになります。

コード:

#include <stdio.h>
#include <stdlib.h>
void main(){
	int A[5]={3,2,1,5,6},B[5]={0},C[5]={-1},i,count=0;
	for( i = 0; i < 5; i++ ){
		B[i] = rand() % 10;
	}
	while(count < 5){
		// ここにcountをリセットする処理

        for( i = 0; i < 5; i++ ){
	        if(B[i] == A[i]){
				C[i] = B[i];
				count = count + 1;
            }else{
				// ここはCではなくBにランダムな値を入れる
                C[i] =  rand() % 10;
			}
 
			// for文を消す
			for(i=0;i<5;i++){
				printf("%d", C[i]);
	            printf("\n");
			}
		}
	}
}
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

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

Re: C言語 配列の要素の比較に関して質問です。

#4

投稿記事 by box » 11年前

どうせなら、全部のソースコードを提示した方がいいと思います。
また、そのグチャグチャな字下げを何とかする方がいいとも思います。
字下げがグチャグチャだと、見つかるバグも見つかりにくくなるような気がします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ruo

Re: C言語 配列の要素の比較に関して質問です。

#5

投稿記事 by ruo » 11年前

たくさんの返信ありがとうございます。
皆様のおかげで解決することができました。

countを0に戻していなかったことが主な原因でした。
ありがとうございました。

閉鎖

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