2013-08-25 2 views
0

카운트 다운 타이머를 만들려고하고 있는데, 무엇인가의 이유로 (Hour> = 1) while 문을 제대로 실행하지 않는 것처럼 보입니다 .- 내가 의견을 말하면타이머가 실행되지 않는 이유는 무엇입니까? - C++

--Hour; 
Minute = Minute +60; 

프로그램은 분을 감소시키는 60 초마다부터 다시 아래로 (60)에서 다음 고급 계산을 실행 ... 시간의 감소 나던 작업 할 왜 누군가가 나에게 설명 할 수 있습니까 ?? 저는 C++과 프로그래밍에 익숙하지 않으므로 최대한 간단하게 유지할 수 있습니다. 감사합니다. 코드는 아래의 스 니펫 :

첫째
while (Hour >= 1) 
{ 
    while (Minute >= 1) 
    { 
     while (Second >= 1) 
     { 
      Sleep(1000); 
      --Second; 
      cout << Hour << " hours, " << Minute << " minutes, " << Second << " seconds;\n"; 
     } 

     Second = Second + 60; 
     --Minute; 
    } 

    Minute = Minute + 60; 
    --Hour; 
} 
+0

'시간> = 0'을 쓰고'분 '도 마찬가지입니까? –

+1

Q : 외부 루프를 시작하기 전에시, 분 및 초를 어떻게 초기화 했습니까? – paulsm4

+0

Dietmar kuhl이 맞았습니다. 시간과 분을> = 0으로 바꿨을 때 프로그램이 완벽하게 정렬되었지만 누군가 나에게 설명 할 수 있습니까? 왜/어떻게 했나요? 여전히 조금 혼란 스럽기 때문에 _ < – user2714567

답변

0

, 당신이 현재 시간을 인쇄 한 후에 --Second;를 이동 Time >= 0에 모든 비교를 변경 제안 코드가 일관성을 할 수 있습니다. 당신이 당신의 프로그램을 실행 이제

int main(void) 
{ 
    int Hour = 1; 
    int Minute = -1; 
    int Second = -1; 

    while (Hour >= 0) 
    { 
    while (Minute >= 0) 
    { 
     while (Second >= 0) 
     { 
     Sleep(1000); 
     cout << Hour << " hours, " 
      << Minute << " minutes, " 
      << Second << " seconds;" << endl; 
     --Second; 
     } 

     Second += 60; 
     --Minute; 
    } 

    Minute += 60; 
    --Hour; 
    } 

    return 0; 
} 

은, 때마다 Second == -1이 현재 분에 남아있는 초 이상이 없음을 의미합니다. Minute == -1 때 시간이 남은 시간이없고 Hour == -1 시간이 완전히 경과 한 경우.

C++에서 루프는 각 실행이 시작될 때 평가됩니다. 위의 코드는 분, 초를 역 증가시키고 시간이 감소하기 전의 시간을 표시합니다.

분 및 초가 처음 0으로 초기화 된 경우 다음 코드는 위 코드와 유사하게 작동합니다 (유용하지는 않을 수도 있음).

while (Hour > 0) 
{ 
    Minute += 60; 
    --Hour; 

    while (Minute > 0) 
    { 
    Second += 60; 
    --Minute; 

    while (Second > 0) 
    { 
     --Second; 
     //sleep(1); 
     cout << Hour << " hours, " 
      << Minute << " minutes, " 
      << Second << " seconds;" << endl; 
    } 
    } 
} 

코드 조각은 시간을 표시하기 전에 시간, 분, 초를 감소시킵니다. 이 두 번째 예제의 한 가지 이점은 으로 정의를 바꿀 수 있으므로 Hour, MinuteSecond이 항상 양수라는 점입니다.

편집 : BenVoigt가 지적했듯이, 위의 두 번째 코드는 행복하게 60 분 (아마도 원하는 것은 아님) 분을 작성합니다.

이 예제가 도움이되기를 바랍니다.

추가 참고 사항 : C++에서는 Minute = Minute + 60; 대신 Minute += 60;을 사용할 수 있습니다. 이것은 단지 속기 일뿐입니다.

+2

"다른 방법"은 행복하게됩니다. 출력 분 및 초 값이 60보다 큽니다. –

+0

@BenVoigt 먼저 컴파일하지 않기 때문에 올바르게 작동합니다. – ilent2

관련 문제