2015-02-08 3 views
0

Несмотря на то, что для каждого оператора печати я устанавливаю разный таймер Sleep(), кажется, что он работает только с самым высоким таймером. Нужна помощь в исправлении этого. ТИА!Проблема с задержкой() в 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

+2

Я не знаю, как это работает с gotoxy, но помните, что стандартный вывод является строковым буфером, поэтому, возможно, ваш вывод printf не показывает потому что он не очищается до экрана до конца? –

+0

То, что я пытаюсь сделать, - это плавно распечатать y & z быстро с помощью x, чтобы замедлить печать, но я не могу понять, как это сделать. –

ответ

2
  1. Не ожидайте слишком много точности от уровня приложения sleep() - как осуществление. Обычно их таймеры могут легко пропустить 10 секунд миллисекунд.
  2. В соответствии с documentation этот параметр Sleep() находится в миллисекундах. Поэтому легко просто не заметить такие паузы. Особенно это не так точно.

Моя рекомендация - просто умножить интервалы времени и проверить. Или зарегистрируйте текущее время настенных часов.

+0

Сэр, вы можете показать мне простой пример умножения временных интервалов в качестве задержки? –

+0

У вас были интервалы, такие как 50 мс, что составляет 0,05 секунды. Как вы ожидаете заметить такой интервал? Просто добавьте 0 к ним, например: 2000, 500, 5000 -> 2s, 0.5s, 5s будет достаточно, чтобы отметить. –

+0

Ох. Понимаю. Благодарю. –

Смежные вопросы