массивы — Как выбрать случайные буквы в переполнении стека

Привет, я работаю над проектом Hangman для моего финала в моем классе C ++. У меня большая часть работала, но я хотел сделать так, чтобы у игрока была возможность играть против компьютерного противника в режиме одиночной игры. Я пытался сделать что-то вроде 97 + rand ()% 123, чтобы затем преобразовать число в символы, но я продолжаю получать странные символы, такие как перевернутый f, я проверил, что я что-то упустил, но у меня есть правильные директивы, и я включил srand ,
упрощенная версия того, что я сделал, выглядит следующим образом

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;

int main(){
char cch;
char ch;
unsigned seed= time(0)
srand(seed)
cch=97rand()%123;
ch=cch;
cout<<"computer chose "<< ch<<endl;
}

обратите внимание, что я не включил все, что мой проект

2

Решение

использование

cch = 'a' + rand()%26;

Это добавит случайное число к «а» (которое в int равно 97, но использование этого числа делает ваш код менее читаемым), помните 'a' == 97 потому что C и C ++ на самом деле не заботятся о вашем типе данных.

Так что, если он хранится как символ, он будет рассматриваться как символ

9

Другие решения

Взгляни на ASCII Таблица и обратите внимание, что допустимые символы от 97 до 122 и от 65 до 90. Я думаю, что вам нужны строчные буквы. Вы можете выбрать случайную строчную букву, например:

char x = 97 + rand() % 26;
4

Возможно, вам будет проще определить массив символов со всеми допустимыми символами, которые вы хотите выбрать, а затем выбрать случайный символ в диапазоне от 0 до количества символов, хранящихся в массиве;

char letters[] = "abcdefghijklmnopqrstuvwxyz";
char x = letters[rand() % 26];

Это может быть не так эффективно, но это проясняет ваши намерения.

Кроме того, если вам когда-либо понадобилось изменить вероятность появления определенных символов чаще, вы можете сделать это, добавив один и тот же символ несколько раз.

3

Формула должна быть: cch = 97 + rand()%26;

0

Вы не хотите, чтобы компьютер продолжал угадывать одни и те же буквы снова и снова.

#include <random>
#include <iterator>
#include <iostream>
#include <algorithm>

int main() {
char letters[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::shuffle(std::begin(letters), std::end(letters),
std::mt19937(seed));

for (char c : letters) {
std::cout << "Computer chose: " << c << '\n';
}
}
0