-1

我正在尝试创建一个游戏,其中反复询问使用 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”。

谢谢您的帮助。

4

2 回答 2

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;
}

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

于 2013-10-21T00:19:26.160 回答
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)))。

于 2013-10-21T00:13:31.800 回答