2015-01-20 1 views
0

이것은 이전 게시물의 동일한 게임입니다 (링크는 Here입니다). 그 게시물의 제목은 "C++ Clock Not Working"이었고 나는 시계를 고정 시켰습니다, "Hooray!". 이제는 지속 시간을 계산하기 위해 사용하는 프로세스가 중단 된 것 같습니다. 나는 항상 'x.y'e-05'를 얻는다. 여기서 시간은 초 안에 있어야하지만 타이머는 'x.y'e-05'보다 먼저 멈춘다. 또한 05는 그것이 기초 8에 있다는 것을 의미합니까? 그렇다면 왜 ???내 간단한 게임의 타이머가 매우 꺼져 있습니다 ... C++

방금 ​​누락 된 매우 간단한 해결책이 있습니다.

  do { 
       //Procedere For Each Round 

       clock_t start; 

       //Clock 
       start = clock(); 

       cout<<"The number is: "<< actualNumber<<endl; 
       getline(cin, numberGuessed); 
       intNumberGuessed = stoi(numberGuessed); 

       clock_t finish; 
       finish = clock(); 

       double elapsed = (double)(finish-start); 


       duration = elapsed/CLOCKS_PER_SEC; 

       cout<<"The Duration Is: "<< duration<<endl; //FOR TESTING... 

       //Test User's input 

       //timeForInput is chosen earlier and is either 1,2,or 5. 
       if((intNumberGuessed == actualNumber) && (duration <= (timeForInput/100000))){ 
        score += 1; 
        gameOver = 0; 

       } else if ((intNumberGuessed != actualNumber) || (duration >= (timeForInput/100000))) { 
        gameOver = 1; 
       } 

       //Reset Number 
       actualNumber = rand() % 4 + 1; 

       //Reset Clock 


      } while (gameOver != 1); 
     } 

     cout<<"You Failed!"<<endl; 
     sleep(1); 
     cout<<"Your Score Was: "<<score<<endl; 

     return 0; 

답변

2

문제는 당신이하지 생각하지 않는 시계()입니다 : 모든 답변은

코드 ... 감상 할 수있다. clock() 함수는 벽시계를 나타내는 값을 반환하지만 clock()이 실제로 리턴하는 것은 전체 시간이 일 때의 계산입니다 (프로그램이 활발하게 실행되었을 때). CPU 코어에서 실행 중입니다. 즉, 프로그램이 "잠든"때 (예 : 입력 대기 중일 때) clock()이 반환 한 값이 증가하지 않습니다. man page가 말하기를 :

당신이 매우 작은 수를 측정하는 이유를 설명
The clock() function returns an approximation of processor time used by the program. 

(x.ye-05은 과학적 표기법은 iexy * 10^-5 초) - 프로그램이 있기 때문에 실행 약간의 시간을 보낸다 대부분의 시간 간격 동안 프로그램이 잠든 것을 측정하고 사용자가 무언가를 입력 할 때까지 기다리는 getline() 내부를 차단합니다.

그래서 clock()은 사용자의 목적에 부합하지 않습니다. 예를 들어 전화를 끊는 것이 좋습니다. gettimeofday()를 호출하고 결과를 다음과 같이 마이크로 초 단위의 값으로 변환합니다.

// Returns a "current wall clock time" value, in microseconds 
unsigned long long GetWallClockTimeInMicroseconds() 
{ 
    struct timeval tv; 
    gettimeofday(&tv, NULL); 
    return ((unsigned long long)tv.sec)*1000000 + tv.tv_usec; 
}