C ++骰子程序困难

时间:2013-10-21 00:45:35

标签: c++ loops random

问题:

  

反复滚动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相同,程序也不会停止。

2 个答案:

答案 0 :(得分:6)

您正在a循环中重新定义bdo ... while。在第二个inta定义之前移除b,您可以将随机值分配给变量,并且它将起作用。

答案 1 :(得分:1)

你在循环中声明了新的变量,这些变量会影响你在循环之外声明的a和b。 while (a != b)正在寻找外面的,但你没有改变它们。

摆脱int

上的int a = (rand() % 6) + 1

如果你正在使用gcc / g ++,你可以用编译器的-Wshadow标志来节省一些痛苦。对于其他编译器,我不知道选项是什么,但可能有一个。至少那个在编译时告诉你问题而不是运行时间。