C ++随机化和循环困难

时间:2013-10-20 23:51:39

标签: c++ random

我正在尝试创建一个游戏,其中重复询问使用1到9之间的数字的乘法问题,直到有人犯错。当它们出错时,程序应显示“oops”。

我的代码:

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main ()
{

srand (time(NULL));
int a= rand()%9+1;
int b= rand()%9+1;
int c;


while (c == a*b)

{


cout<<a<<" * "<<b<<"= ";
cin>>c;

}


    cout<<"oops";

return 0;
}

我有两个困难。首先,在程序中生成相同的“随机”数字。其次,当有人犯错误时,不会显示“oops”。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您每次都看到相同的数字,因为您在循环之前初始化它们,然后在用户回答时不要更改它们。为此,每次(重新)输入循环时都会生成新的随机值。您可能不会看到“oops”,因为您的程序会立即终止。要解决此问题,您可以在退出前使用getch()等待一些输入。

我修复了你的代码,所以要研究它并从变化中学习:

#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main()
{
    srand (time(NULL));
    int a = 0;
    int b = 0;
    int c = 0;
    while (c == a*b)
    {
        a= rand()%9+1;
        b= rand()%9+1;

        cout<<a<<" * "<<b<<"= ";
        cin>>c;

    }
    cout<<"oops";
    getch();//Get some input so program does not terminate instantly
    return 0;
}

如果您有任何疑问,请随时发表评论。

答案 1 :(得分:0)

您需要为随机数生成器播种,或者每次都会得到相同的随机数。通常的做法是使用程序启动时的当前时间为随机数生成器播种,例如:

srand(time(NULL));

您的程序在cout << "oops"行后立即退出。根据您的调试环境,即使将最终输出放在控制台上,也可能看不到最终输出。最终输出也可能被缓存(而不是立即放在控制台上)。您可以尝试添加新行,例如:

cout << "oops" << endl;

或添加显式调用以防止程序立即退出。在(比如)Windows下的Visual Studio中,您可以添加如下命令:

system("PAUSE");
return 0之前

,以防止调试控制台立即消失。在其他环境中,你不会有“PAUSE”,但你可以在最后设置一个无限循环,比如while (true) { /* do nothing */ }只是为了调试。

最后,rand不被认为是一个非常好的伪随机数生成器,现在大多数人都喜欢random(和srandom(time(NULL)))。