如何让我的代码随机打印字符或字符串?

时间:2014-03-05 21:28:48

标签: c++ string random numbers percentage

所以我正在尝试测试一些东西,看看rand()在c ++中是如何工作的!我对c ++很新,但我想知道如何生成以下代码,在生成数字1或2时打印出字母B或A?代码询问他是否要生成一个字母,输入y表示是或n表示否!然后一个字母生成但似乎只生成字母A ??任何想法?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>

    using namespace std;

    int main(){
        char x;
        char d;
        cout << "generate random letter?(y/n)" << endl;
        cin >> x;
        if (x = 'y'){
    srand(time(NULL));

    int randNum = (rand() % 2) + 1;
    if (randNum = 1){
        d = 'A';
    }
    else {
        d = 'B';
    }
    cout << d << endl;
}
else{ return 0; }
system("pause");
    }

4 个答案:

答案 0 :(得分:2)

改变这个:

if(randNum == 1){

答案 1 :(得分:0)

在现代C ++中,rand() is deprecated以及其他基于例如使用mt19937 Mersenne twister引擎和uniform_int_distrubtion

您可能需要考虑以下代码:

#include <iostream>     // For console output
#include <random>       // For pseudo-random number generators and distributions

int main()
{
    // Use random_device to generate a seed for Mersenne twister engine.
    std::random_device rd;    

    // Use Mersenne twister engine to generate pseudo-random numbers.
    std::mt19937 engine(rd());

    // "Filter" MT engine's output to generate pseudo-random integer values,
    // **uniformly distributed** on the closed interval [0, 1].  
    // (Note that the range is [inclusive, inclusive].)
    std::uniform_int_distribution<int> dist(0, 1);

    // Print 20 pseudo-random letters (A, B).
    for (int i = 0; i < 20; ++i)
    {
        // Generate pseudo-random number
        if (dist(engine) == 0)
        {
            std::cout << 'A';
        }
        else 
        {
            std::cout << 'B';
        }
        std::cout << ' ';
    }
    std::cout << std::endl;
}

答案 2 :(得分:0)

当你说:

if(randNum = 1)

您将值1分配给randNum,然后检查它是否为True。在C / C ++中,任何非零数字都是True。通过这种方式,您始终可以输入if语句的第一部分并获得“A”。

相反,如果你说:

if(randNum == 1)

您正在将randNum1进行比较,并获得您想要的行为。

答案 3 :(得分:0)

有一种更简单的方法来生成随机字符。可以使用ASCII代码编号创建字符,因为我们知道从大写字母A到小写字母Z的范围是65-122(谷歌ASCII表格)

std::random_device rd;
std::mt19937 engine(rd());
std::uniform_int_distribution<int> dist(65, 122);
char ascii_char = dist(engine);
std::cout << scii_char;

作为附注,std :: uniform_int_distribution dist(65,122)是包含的,因此它包括65和122.