如何防止在c中cin之后生成新的rand()

How to prevent a new rand() being generated after cin in c?

本文关键字:rand 后生 之后 何防止 cin      更新时间:2023-10-16

如何防止从cin生成新的rand()值?我正在构建一个程序,如果用户没有输入正确的输入,srand()仍然保留其值,直到用户输入正确的值。

我该如何设置循环来执行此操作?

例如,如果我只查找1-6之间的数字。例如,如果rand()的值是994,如果用户输入字母A,那么在输入数字之前,rand()的值仍然是994。

while(user input is a number){
    if(rand()%6 == 1){
        if(userNumber == 1){
        cout << "Your roll is 1.  Please roll again: "
        cin >> userRoll;
        else{
        cout << "Invalid roll.  Please roll again: "
        cin >> userRoll;
        }
    }
    else if(rand()%6 == 0){
        if(userNumber == 1){
        cout << "Your roll is Blue.  Please roll again: "
        cin >> userRoll;
        }
        else{
        cout << "Invalid roll.  Please roll again: "
        cin >> userRoll;
        }
    }
}

所以srand有两个不同的路径,但如果roll无效,我希望rand的值保持不变,这样它仍然在userNumber==1或userNumber===0路径中。

保存rand()的返回并只使用rand()一次:

int some_random_number = rand();
while(user input is a number){
    if(some_random_number % 6 == 1){
        // ... snip ...
    }
    else if(some_random_number % 6 == 0){
        // ... snip ...
    }
}

在修复代码时,请查看被认为有害的rand()