问题:
反复滚动3个骰子直到双打滚动(任何两个是骰子 相同)。每次显示值,然后显示尝试的次数 它需要双打。
我的代码:
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main ()
{
srand (time(NULL));
int j=1;
int i=0;
int a;
int b;
do
{
int a=(rand ()%6+1);
int b=(rand ()%6+1);
cout<<a<<" and "<<b<<endl<<endl;
j++;
}
while (a!=b);
cout<<"They are the same!"<<endl<<endl;
cout<<"It took "<<j<<" tries.";
return 0;
}
问题:
循环不会停止。即使a和b相同,程序也不会停止。
答案 0 :(得分:6)
您正在a
循环中重新定义b
和do ... while
。在第二个int
和a
定义之前移除b
,您可以将随机值分配给变量,并且它将起作用。
答案 1 :(得分:1)
你在循环中声明了新的变量,这些变量会影响你在循环之外声明的a和b。 while (a != b)
正在寻找外面的,但你没有改变它们。
摆脱int
int a = (rand() % 6) + 1
如果你正在使用gcc / g ++,你可以用编译器的-Wshadow
标志来节省一些痛苦。对于其他编译器,我不知道选项是什么,但可能有一个。至少那个在编译时告诉你问题而不是运行时间。