Быстрое объяснение: Я хочу присвоить случайные числа словам так, чтобы каждая буква имела другое число. для удобства я использовал массивы вместо отдельных однобуквенных переменных; таким образом я знаю, что «abc [1]» является буквой «b» от слова «abc». Первый номер слова использует другой диапазон, чтобы избежать номера, как «075»Do ... while loop неожиданное поведение
#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» часть цикла.
Вы можете предложить лучший способ делать то, что я пытаюсь сделать, или просто решить проблему, либо будет прекрасно работать, так как проект не является чем-то большим, он просто используется как решатель головоломки.
Вы пробовали проверить значение определения функции [0] '' против аЬса [0], 'а [1]', и 'аЬс [2]'? –
Вы можете попробовать использовать один массив и выполнить проверку сравнения, используя, возможно, другую функцию. –
Ваш код C99, а не (подлинный) C++ 11 (так что пометьте его как C). Затем скомпилируйте его со всеми предупреждениями и информацией об отладке (если вы используете [GCC] (http://gcc.gnu.org/) в качестве своего компилятора, чем средство с 'gcc -Wall -g') и улучшите его, пока не получите предупреждения. Затем ** используйте отладчик ** (например, 'gdb'). Ваш запрос на исправление-мой-код здесь не по теме. –