2015-02-08 84 views
0

儘管我爲每個打印語句設置了不同的Sleep()計時器,但它似乎只能執行具有最高計時器的計時器。需要一些幫助解決此問題。 TIA!C中的延遲()問題

#include <stdio.h> 
#include <windows.h> 

void gotoxy(short int x, short int y); 

int main() 
{ 
    int c = 1, d = 1, e, x, y, z, a; 
    srand (time(NULL)); 

    for(a = 0; a <= 100; a++) { 
     x = rand() % 9 + 1; 
     y = rand() % 9 + 1; 
     z = rand() % 9 + 1; 
     gotoxy(5, 5); 
     Sleep(200); printf("%i", x); 
     gotoxy(8, 5); 
     Sleep(50); printf("%i", y); 
     gotoxy(11, 5); 
     Sleep(500); printf("%i", z); 
    } 

    return 0; 
} 

void gotoxy(short int x, short int y){ 
    COORD pos = {x, y}; 
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); 
} 
+1

我想你只是沒有注意到它,因爲時間以毫秒爲單位? (只需添加一個0到永遠的睡眠值,然後你就可以知道區別了) – Rizier123 2015-02-08 14:09:08

+2

我不知道它如何與gotoxy協同工作,但請記住標準輸出是行緩衝的,所以也許你的printf輸出不會顯示因爲直到最後纔會刷新屏幕? – 2015-02-08 14:11:41

+0

我想要做的是平穩地打印y和z,只用x來減慢打印速度,但我無法確定如何去做。 – 2015-02-08 14:12:58

回答

2
  1. 不要從應用級sleep()抱太大的期望精度 - 像執行。通常他們的計時器很容易錯過10毫秒的毫秒。
  2. 按照documentation這個Sleep()參數是以毫秒爲單位。所以很容易就沒有注意到這樣的停頓。尤其是沒有如此準確的實施。

我的建議只是乘以時間間隔和檢查。或記錄當前掛鐘時間。

+0

先生,你能告訴我一個將時間間隔乘以延遲的簡單例子嗎? – 2015-02-08 14:29:25

+0

您的間隔時間爲0.05秒,即50 ms。你期望如何注意這種間隔?只需給它們加0,例如:2000,500,5000 - > 2s,0.5s,5s就足夠了。 – 2015-02-08 14:38:01

+0

哦。我懂了。謝謝。 – 2015-02-08 14:43:13