説明: すべての文字に異なる数字があるように、ランダムな数字を単語に割り当てる必要があります。便宜上、別々の1文字変数の代わりに配列を使用しました。このように私は "abc [1]"は単語 "abc"からの文字 'b'であることを知っています。単語の最初の数は、私は数字が真にランダムではないことを認識しています「075」のような数字を避けるためにDo ... whileループの予期しない動作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int abc[2];
int def[2];
void setRandom()
{
abc[0] = rand() %9+1;
do {abc[1] = rand() %10;} while (abc[1] == abc[0]);
do {abc[2] = rand() %10;} while (abc[2] == abc[1] || abc[2] == abc[0]);
printf("RANDOM abc %d %d %d", abc[0], abc[1], abc[2]); //printed just fine.
do {def[0] = rand() % 9 +1; } while (def[0] == abc[2] || def[0] == abc[1] || def[0] == abc[0]); //code seems to be stuck here
do {def[1] = rand() %10;} while (def[1] == def[0] || def[1] == abc[2] || def[1] == abc[1] || def[1] == abc[0]);
do {def[2] = rand() %10;} while (def[2] == def[1] || def[2] == def[0] || def[2] == abc[2] || def[2] == abc[1] || def[2] == abc[0]);
printf("RANDOM def %d %d %d", def[0], def[1], def[2]); //THIS CODE IS NEVER REACHED. WHY?
}
int main()
{
setRandom();
printf("RANDOM SET");
}
を別の範囲を使用しています。私はコードが乱雑であることを認識しています。私はそれがブルートフォースの数字には非効率的だと認識しています。私は数字を設定するこの方法が悪いことを知っていますが、何か良いことは考えられませんでした。このコードは私の目的のために仕事をします。
問題は、上記のコードがdef [0]の番号を生成している間にスタックしてしまうことです。それは無限に新しい乱数を生成しますが、ループの一部分を完全に無視しているようです。
私がやろうとしていることを実行するためのより良い方法を提案するか、単に問題の解決方法を提案するか、プロジェクトが大きなものではないので、どちらかといえばうまくいくでしょう、それは単にパズルソルバーとして使用されます。
を割り当てるように、 '[1]'、 '[0] [0]' ABC '対あなたがデフ'の値を検査しようとしたことがあり、ABCをあなたのコードを修正し、 'abc [2]'? –
単一の配列を使用して、おそらく別の関数を使用して比較チェックを試してみてください。 –
あなたのコードはC99ではなく、(本物ではありません)C++ 11です。それから、コンパイル時に 'gcc -Wall -g'を使うよりも、すべての警告とデバッグ情報([GCC](http://gcc.gnu.org/)を使用している場合)をコンパイルしてください。警告。次に**デバッガ**を使用します(例: 'gdb')。あなたのfix-my-codeリクエストはここで話題にはなりません。 –