Schnelle Erklärung: Ich möchte den Wörtern Zufallszahlen zuweisen, so dass jeder Buchstabe eine andere Nummer hat. Aus Bequemlichkeitsgründen habe ich Arrays anstelle von separaten Ein-Buchstaben-Variablen verwendet; Auf diese Weise weiß ich, dass "abc [1]" der Buchstabe "b" aus dem Wort "abc" ist. Die erste Zahl eines Wort mit unterschiedlichem Bereich Zahlen zu vermeiden, wie „075“Do ... while-Schleife unerwartetes Verhalten
#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");
}
Ich bin mir bewusst, dass die Zahlen sind nicht wirklich zufällig. Ich bin mir bewusst, dass der Code unordentlich ist. Ich bin mir bewusst, dass es zu Brute-Force-Zahlen ineffizient ist. Ich bin mir bewusst, dass diese Art der Zahlensetzung schlecht ist, aber mir ist nichts Besseres eingefallen. Dieser Code wird die Aufgabe für meine Zwecke erledigen.
Das Problem ist, dass der obige Code beim Generieren der Zahl für def [0] stecken bleibt; es wird unendlich neue Zufallszahlen erzeugen, es scheint komplett zu sein, während es Teil der Schleife ist.
Sie können entweder vorschlagen, eine bessere Methode zu tun, was ich versuche, oder einfach eine Lösung für das Problem, entweder wird es gut, da das Projekt nicht groß ist, es wird nur als Rätsellöser verwendet.
Haben Sie versucht, die Werte von 'def [0]' 'vs abc [0]', 'abc [1]' Inspektion und 'abc [2]'? –
Sie können versuchen, ein einzelnes Array zu verwenden und Vergleichstests mit einer anderen Funktion durchzuführen. –
Ihr Code ist C99, nicht (echt) C++ 11 (also es als C kennzeichnen). Dann kompiliere es mit allen Warnungen und Debug-Informationen (wenn du [GCC] (http://gcc.gnu.org/) als deinen Compiler verwendest, dann heißt das mit 'gcc -Wall -g') und verbessere es, bis du keine hast Warnungen. Dann ** benutze den Debugger ** (z.B. 'gdb'). Ihre Anfrage zur Fehlerbehebung ist hier nicht verfügbar. –