快速說明: 我想分配隨機數的單詞,在某種意義上每個字母都有不同的數字。爲了方便起見,我使用了數組而不是單獨的單字母變量;這樣我知道「abc [1]」是單詞「abc」中的字母「b」。一個單詞的第一個號碼使用不同的範圍內,以避免像「075」做... 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]中產生數字時卡住了;它會無限地產生新的隨機數,它似乎完全忽略了'while'循環的一部分。
你可能會提出一個更好的方法來做我想做的事情,或者只是解決問題,或者做得很好,因爲項目沒什麼大事,它只是用作解謎器。
你嘗試過檢查的'值DEF [0]''VS ABC [0]','ABC [1]',和'ABC [2]'? –
您可以嘗試使用單個數組並使用其他函數進行比較檢查。 –
你的代碼是C99,而不是(真正的)C++ 11(所以標記爲C)。然後,編譯所有警告和調試信息(如果使用[GCC](http://gcc.gnu.org/)作爲你的編譯器,比使用'gcc -Wall -g'的方式),並改進它,直到你沒有警告。然後**使用調試器**(例如'gdb')。您的fix-my-code請求在此處不在話題中。 –