Прежде всего, в вашем методе Cracked
вы зацикливаетесь на всех пяти индексах, обусловленных только одним индексом.Вы делаете это пять раз.В среднем требуется 256 попыток для сопоставления правильного символа.Это приводит к генерации и присваиванию около 5 * 5 * 256 = 6400 целых чисел, что требует больше работы, чем вам нужно.
Проблема с вашим кодом заключается в том, что вы присваиваете всем пяти индексам в каждом do while
петля.Тогда любой правильный символ, который вы нашли в предыдущем цикле, будет перезаписан случайными данными в следующем цикле, так что только последний символ будет правильным.Ниже приведена откорректированная реализация, которая устраняет эти проблемы.
void Cracked(char cracked[5], char pass[5]) {
for (int a = 0; a < 5; a++) {
do {
int b = rand() % 256;
cracked[a] = char(b);
} while(cracked[a] != pass[a]);
}
}
Поскольку цикл for
теперь находится снаружи, он будет пытаться выполнять случайные операции, пока не выяснит персонажа, а затем перейдет к следующему персонажу.не касаясь других символов.
Вы также заметите, что использование цикла for приводит к гораздо меньшему количеству кода, который был в основном таким же.Как правило, если вы обнаружите, что копируете код, это означает, что вы должны использовать цикл, функцию или другую конструкцию, чтобы избежать лишнего кода или чтобы компилятор сгенерировал его для вас.Это значительно упрощает поддержку вашего кода.Например, если вы хотите заменить функцию rand
, используемую в каждом цикле do while
, вам придется заменить ее только один раз, а не пять раз.
Кроме того, в этом случае, вероятно, было бы лучшепопробуйте все возможные значения отдельно, а не случайные значения (например, с циклом for
).Я дам вам понять эту часть.