1

问题:

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

4

2 回答 2

6

你正在重新定义abdo ... while循环。删除int之前的第二个ab定义,您将随机值分配给变量,它将起作用。

于 2013-10-21T00:49:33.200 回答
1

您正在循环内声明新变量,这些变量会影响您在循环外声明的 a 和 b。while (a != b)正在看外面的,但你没有改变那些。

摆脱intint a = (rand() % 6) + 1

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

于 2013-10-21T00:51:28.093 回答