2013-10-21 3 views
1

질문 : 더블 압연까지C++ 프로그램 주사위 어려움

반복적 롤 (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가 같은 경우에도 프로그램은 멈추지 않습니다.

답변

6

do ... while 루프 안에 ab을 재정의했습니다. 두 번째 ab 정의 앞에 int을 제거하고 변수에 임의의 값을 할당하면 작동합니다.

1

루프 외부에서 선언 한 a와 b를 음영 처리하는 새 변수를 루프 내에 선언하고 있습니다. while (a != b)은 바깥 쪽을보고 있지만 바뀌지는 않습니다. 당신의 gcc/g ++, 당신은 아마 당신의 컴파일러에 대한 -Wshadow 플래그와 함께 자신에게 약간의 고통을 절약 할 수 사용하는 경우

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

int 제거하십시오. 다른 컴파일러의 경우 옵션이 무엇인지 모르지만 실제로는있을 수 있습니다. 적어도 그것은 런타임 대신에 컴파일 타임에 문제를 알려 줄 것입니다.