我正在尝试使用此标准C-Free 5.0创建秒表程序。这是我到目前为止所得到的:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
char button;
int minutes=0, seconds=0, millisec=0;
int main(void)
{
while(1)
{
reset:
button = '\0';
int minutes=0, seconds=0, millisec=0;
printf(" %d : %d : %d ", minutes, seconds, millisec);
system("cls");
if(button == 'a')
{
while(1)
{
cont:
button = '\0';
Sleep(10);
millisec++;
if(millisec == 100)
{
millisec = 0;
seconds++;
if(seconds == 60)
{
seconds = 0;
minutes++;
}
}
printf(" %d : %d : %d ", minutes, seconds, millisec);
system("cls");
if(button == 's')
{
while(1)
{
button = '\0';
printf(" %d : %d : %d ", minutes, seconds, millisec);
system("cls");
if(button == 'a')
{
goto cont;
}
if(button == 'd')
{
goto reset;
}
}
}
}
}
}
}
我正试图按下按钮'a'启动秒表,但它不起作用。使用scanf()将暂停整个程序。有没有办法检测按下的按钮并继续秒表程序?我的意思是没有暂停程序,特别是按下's'来停止并再次按'a'继续,同时始终显示计时器。
答案 0 :(得分:3)
这应该有助于_kbhit
,并且在_getch()
之后使用#include <conio.h>
//...
int key;
while (1)
{
if (_kbhit())
{
key = _getch();
if (key == 'a')
printf("You pressed 'a'\n");
else if (key == 'd')
printf("You pressed 'd'\n");
}
}
非常重要。
{{1}}
答案 1 :(得分:2)
由于您使用system("cls");
,这可能是在dos / Windows命令提示符下。您可以尝试查看编译器是否支持conio.h。
如果是,kbhit()
or _kbhit()
(链接到MSDN,您应该检查编译器库的文档以获得最准确的参考)似乎是您需要使用的。
答案 2 :(得分:0)
这是一个系统问题而不是C.一般情况下,您的托管系统会为输入提供缓冲,因此当您按某个键时,它不会在当时传送到您的程序,它会被缓冲直到某些情况发生(基本上,按下了行尾。)
在Windows下,您应该拨打不同的电话来获取按键。
在Unix下,你应该把你的tty置于非规范模式(对tcgetattr
和tcsetattr
进行一系列魔术调用。)
答案 3 :(得分:0)
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<time.h>
#include<windows.h>
main()
{
int choice, h,m,s; h=0; m=0; s=0; //--variable declaration--//
char p= 'p';
printf("Press 1 to start the timer\nPress 2 to exit\n");
printf("\nEnter your choice\n");
scanf("%d",&choice);
switch(choice) //--switch case --//
{
case 1:
{
while(1) //--while condition is true//
{
if(s>59) //--if seconds(s) is > 59--//
{
m=m+1; //--increment minute by 1--//
s=0;
}
if(m>59) //--if minutes(s) is > 59--//
{
h=h+1; //--increment hour by 1--//
m=0;
}
if(h>11) //--if hour(h) is > 11--//
{
h=0; //-Hour to 0--//
m=0;
s=0;
}
Sleep(1000); //--inbuilt function for 1sec delay--//
s=s+1;
system("cls"); //--Clear screen--//
printf("DIGITAL CLOCK");
printf("\n\nHOUR:MINUTE:SECOND");
printf("\n\n%d:%d:%d",h,m,s); //--Print time--//
printf("\n\nTo pause : press P\n");
if(kbhit()) //--Check if any button is pressed on keyboard--//
{
if(p==getch()) //--Check if P is pressed--//
{
system("pause"); //--Inbuilt function for pause and resume--//
}
}
}
break;
}
case 2:
exit(0); //--Exit --//
default:
{
printf("Wrong Choice");
}
}
getch(); //--Holding the screen--//
return 0;
}