嗨,我正在为我的c ++课程中的最后一个刽子手项目工作。我已经完成了大部分工作,但我想做到这一点,所以玩家可以选择在单人模式下对抗电脑对手。我尝试做类似97 + rand()%123之类的东西,然后将数字转换为字符,但我一直在变得怪异的字符,比如颠倒了我检查一下,看看我是否遗漏了一些东西,但我有正确的指令,我加入了一个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;
}
请注意,我没有包含我项目的所有内容
答案 0 :(得分:9)
使用
cch = 'a' + rand()%26;
这会在'a'中添加一个随机数(在int等于97但是使用该数字会使代码的可读性降低),请记住'a' == 97
因为C和C ++实际上并不关心你的数据类型。
因此,如果将其存储为char,则将其视为char
答案 1 :(得分:4)
查看ASCII表并注意有效字符介于97到122和65到90之间。我认为您需要小写字母。你可以选择一个随机的小写字母:
char x = 97 + rand() % 26;
答案 2 :(得分:3)
您可能会发现使用您想要选择的所有有效字符定义char数组更容易,然后选择0和数组中存储的字符数之间的随机字符;
char letters[] = "abcdefghijklmnopqrstuvwxyz";
char x = letters[rand() % 26];
它可能效率不高,但它会使你的意图更加清晰。
此外,如果您需要修改某些字符更频繁出现的概率,您可以通过多次添加相同的字符来实现。
答案 3 :(得分:0)
公式应为:cch = 97 + rand()%26;
答案 4 :(得分: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';
}
}