我正在尝试创建一个游戏,其中重复询问使用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”。
感谢您的帮助。
答案 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))
)。