前提・実現したいこと
乱数を使ってビンゴカードの数値を得ます。そのとき、すべての数値は互いに異なる必要があります。
発生している問題・エラーメッセージ
Get_number関数で、すべての数値が互いに異なるとき、Get_number関数を再帰的に呼び出さずに
Get_number関数を抜けるはずが、実際は抜けてくれないです。printf("********\n")
によって
昇順ソート済みの重複のない配列を見やすくしています。
また今回の質問には関係ないことですが、Get_number関数ないで新たに配列subを作ったのは、
乱数なのに昇順ソートされて出てくるのが気持ち悪いからです。
###該当のソースコード
#include <stdio.h> #include <time.h> #include <stdlib.h> #define NUM 9 #define WIDTH 3 void Get_number(int p[]); void Make_card(int p1[], int p2[][WIDTH]); void Print_card(int p3[][WIDTH]); int main(void) { int num1[NUM] = {0}; int num2[WIDTH][WIDTH] = {}; //ビンゴカードの作成**********// srand((unsigned)time(NULL)); Get_number(num1); printf("PRINTDEBUG\n"); Make_card(num1, num2); Print_card(num2); return 0; } void Get_number(int p[]) { int i,j; int sub[NUM] = {0}; int buffer=0; for(i=0; i<NUM; i++) {p[i]=rand()%20+1;} for(i=0; i<NUM; i++) {sub[i]=p[i];} //昇順にソートして全て異なる数字かを判定する for(i=0; i<NUM-1; i++) { for(j=i+1; j<NUM; j++) { if(sub[i]>sub[j]) {buffer=sub[i]; sub[i]=sub[j]; sub[j]=buffer;} } } for(i=0; i<NUM; i++) {printf("%d ", sub[i]);} printf("\n"); for(i=0; i<NUM-1; i++) { if(sub[i]==sub[i+1]) {Get_number(p);} } //全ての整数が異なるときにGet_number関数を抜けて //くれないことをわかりやすくするために書いてます。 printf("******\n"); return; } void Make_card(int p1[], int p2[][WIDTH]) { int i,j; int k=0; for(i=0; i<WIDTH; i++) { for(j=0; j<WIDTH; j++) { p2[i][j]=p1[k]; k++; } } return; } void Print_card(int p3[][WIDTH]) { int i,j; for(i=0; i<WIDTH; i++) { for(j=0; j<WIDTH; j++) { printf("%d\t", p3[i][j]); } printf("\n"); } return; }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/02 05:50
退会済みユーザー
2018/07/02 07:45