Как приостановить цикл в C/C++
Я пытаюсь сделать экран для автомобильной игры и заставить экран ждать, пока клавиша перейдет на следующий экран, дело в том, что с помощью этого кода он слишком быстро меняет цвета. Я уже пробовала delay()
а также sleep()
которые не сработали должным образом. Кроме того, после нажатия клавиши он закрывается и не ждет, пока я введу ключ. Я просто хочу, чтобы заголовок мигал между белым и красным до тех пор, пока не нажата клавиша, и узнал, почему она закрывается после нажатия клавиши.
Вот мой код:
#include <dos.h>
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "C|\\BORLANDC\\BGI");
outtextxy(250,280,"POINTER DRIVER 1.0");
outtextxy(250,290,"LCCM 10070249");
do
{
setcolor(WHITE);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
// delay(10); nothing works here :(
setcolor(RED);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
} while(!kbhit());
cleardevice();
outtextxy(250,290,"HELLO"); //here it draws mega fast and then exits
getch();
closegraph();
return 0;
}
2 ответа
Вместо того, чтобы использовать delay(10)
, возможно, попробуйте использовать какую-то переменную таймера, чтобы сделать это. Попробуйте что-то вроде следующего (модификация вашего do-while
петля):
unsigned flashTimer = 0;
unsigned flashInterval = 30; // Change this to vary flash speed
do
{
if ( flashTimer > flashInterval )
setcolor(RED);
else
setcolor(WHITE);
outtextxy(250,380,"PRESS ANY KEY TO CONTINUE");
++flashTimer;
if ( flashTimer > flashInterval * 2 )
flashTimer = 0;
// Remember to employ any required screen-sync routine here
} while(!kbhit());
kbhit()
возвращается true
если в буфере есть символ, но он не удаляется до его возврата. Как только вы достигнете getch()
В строке требуется первая нажатая клавиша, чтобы выйти из цикла while.
Возможное решение: хотя это немного странно, добавив getch()
сразу после вашего цикла while это, вероятно, исправит.
Могу ли я также предложить использовать ncurses вместо этих библиотек Borland?