2012-03-21 7 views
0

왜이 코드는 "New time"을 두 번 이상 인쇄하지 않습니까? 루프 외부에서 clock()을 호출하지 않고도 고칠 수 있습니까?while 문에서 이전 변수 값을 새 값과 비교합니까?

#include <stdio.h> 
#include <time.h> 
int main(char argv[], int argc) 
{ 
    double lastTime = 0; 
    while(1) 
    { 
     printf("New time:\n"); 
     while(lastTime == (lastTime = (double)clock()/(double)CLOCKS_PER_SEC)) 
     { 
      printf("%f\n", lastTime); 
     } 
    } 
    return 0; 
} 

답변

0

예상대로이 줄은 작동하지 않습니다 (나는 그들이 위 실종 된 원인 닫는 괄호를 추가했습니다) 기본적으로이 결과, 먼저 평가 : 기본적으로 분명히 while(true)while(0 == 0)로 연결

while(lastTime == lastTime) 

합니다.

이전 값을 유지하려면 최소한 두 번째 변수가 필요합니다. 그런 다음 lastTime == 0 (즉, 루프가 처음 실행될 때)에 대한 추가 사례를 추가하십시오. 그것은 그 쉬운 일이 아닙니다으로 두 배 값이 정확하게 일치하는


또한, 위의 댓글에서 언급 한 바와 같이, 당신은 값을 비교 안 (특히. 계산 된 경우).

당신은 시간이지나까지 추가 할 때마다 X 밀리 초 (또는 다른 시간), 당신은 카운터를 사용해야 어떤 행동을하려는 경우 : (

for(clock_t timeSkipped = 0, lastTick = clock() ; ; timeSkipped += clock() - lastTick, lastTick = clock()) { 
    while(timeSkipped > 0.5 * CLOCKS_PER_S) { // example: this will run the content of this loop at a fixed time step of once every half second 
     timeSkipped -= 0.5 * CLOCKS_PER_S; 
     printf("Tick!"); 
    } 

}도

4

코드가 잘린 것처럼 보입니다. 그러나 귀하의 문제는이 논리에 있습니다.

while (lastTime == (lastTime = something)) 

테스트는 항상 true입니다. lastTime에 값을 할당 한 다음 자체와 비교합니다.

while(lastTime == (lastTime = (double)clock()/(double)CLOCKS_PER_S)) 

때문에 괄호로 비교의 오른쪽 (할당) :

+2

평등 연산자 ==) 두 배로하는 것은 좋은 생각이 아닙니다. – keety

+0

이전 값을 새 값과 비교하고 lastTime에 새 값을 할당하고 싶습니다. – Tyilo

관련 문제