C编程:我想让我的秒表连续,但当按下一个键时,它似乎只在一秒钟内递增并停止
因此,我的代码执行秒表功能。当我按D键或U键时,我希望秒表计数上升或下降。它这样做了,但只做了一秒钟就停止了。我如何使它连续。i、 我按下向下键,秒表倒计时。另外,我将如何合并重置键C编程:我想让我的秒表连续,但当按下一个键时,它似乎只在一秒钟内递增并停止,c,C,因此,我的代码执行秒表功能。当我按D键或U键时,我希望秒表计数上升或下降。它这样做了,但只做了一秒钟就停止了。我如何使它连续。i、 我按下向下键,秒表倒计时。另外,我将如何合并重置键 #include <time.h> #include <stdio.h> #include <windows.h> #include <conio.h> int main() { char c; int time_elapsed = 0; i
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main()
{
char c;
int time_elapsed = 0;
int flag = 0;
for (;;) {
if (flag == 0) {
Sleep(1000);
time_elapsed++;
printf("Time elapsed since stopwatch started = %d seconds\n",
time_elapsed);
}
if (kbhit()) {
c = getch();
if (c == 's') {
/* Stop */
printf("You pressed s, so stopwatch is being stopped!\n");
flag = 1;
} else if (c == 'u' && flag == 1) {
/* Up */
time_elapsed = time_elapsed + 1;
printf("You pressed u, so stopwatch reading is increased by 1 second!\n");
printf("Time elapsed since stopwatch started = %d seconds\n",
time_elapsed);
} else if (c == 'd' && flag == 1) {
/* Down */
time_elapsed = time_elapsed - 1;
printf("You pressed d, so stopwatch reading is decreased by 1 second!\n");
printf("Time elapsed since stopwatch started = %d seconds\n",
time_elapsed);
}
}
}
return 0;
}
#包括
#包括
#包括
#包括
int main()
{
字符c;
int time_经过的时间=0;
int标志=0;
对于(;;){
如果(标志==0){
睡眠(1000);
经过的时间++;
printf(“秒表启动后经过的时间=%d秒\n”,
时间_);
}
if(kbhit()){
c=getch();
如果(c='s'){
/*停止*/
printf(“您按了s,秒表停止了!\n”);
flag=1;
}else if(c='u'&&flag==1){
/*向上*/
经过的时间=经过的时间+1;
printf(“您按了u,所以秒表读数增加了1秒!\n”);
printf(“秒表启动后经过的时间=%d秒\n”,
时间_);
}else if(c='d'&&flag==1){
/*向下*/
经过的时间=经过的时间-1;
printf(“您按了d,所以秒表读数减少了1秒!\n”);
printf(“秒表启动后经过的时间=%d秒\n”,
时间_);
}
}
}
返回0;
}
您需要一个变量来存储秒表的运行方向,在睡眠之后
您需要根据该变量的值来调整经过的时间。我必须承认,我不完全确定您在问什么。我假设您希望程序在按“s”时停止计数,在按“u”或“d”时继续计数,对吗
如果是这种情况,那么您的代码将无法工作,因为您在按下“d”或“u”后仍处于状态1。但计数只发生在状态0中,即向上计数。因此,要计数,必须切换回0状态。要倒计时,您必须创建另一个状态并在该状态下倒计时
编辑:
下面是一个工作示例,它可以满足您的需要:
#include <time.h>
#include <stdio.h>
typedef enum {STOPPED, COUNTING_UP, COUNTING_DOWN} state;
int main()
{
/* declare variables */
state my_state;
time_t time1, time2;
char c;
double time_difference, time_elapsed;
/* initialize variables */
time_elapsed = 0;
my_state = STOPPED;
/* show info */
printf("Press 'u' to start counting up or 'd' to start counting down.\nPress 'q' to end program.\n\n");
while(1)
{
c = getchar();
time1 = time2;
time2 = time(0);
if (c == 'u' && my_state == STOPPED) {
my_state = COUNTING_UP;
printf("Started counting up.\n");
}
else if (c == 'd' && my_state == STOPPED) {
my_state = COUNTING_DOWN;
printf("Started counting down.\n");
}
else if (c == 's' && my_state == COUNTING_UP) {
my_state = STOPPED;
time_difference = difftime(time2, time1);
time_elapsed += time_difference;
printf("Stopped counting up. Counted up for %.0f seconds.\n", time_difference);
}
else if (c == 's' && my_state == COUNTING_DOWN) {
my_state = STOPPED;
time_difference = difftime(time2, time1);
time_elapsed -= time_difference;
printf("Stopped counting down. Counted down for %.0f seconds.\n", time_difference);
}
else if (c == 'q') {
printf("Program is closing.\n");
break;
}
else {
continue;
}
/* show info */
printf("Total count: %.0f seconds\n", time_elapsed);
if (my_state == STOPPED) {
printf("Press 'u' to start counting up or 'd' to start counting down.\nPress 'q' to end program.\n\n");
}
else if (my_state == COUNTING_UP) {
printf("Press 's' to stop counting up.\nPress 'q' to end program.\n\n");
}
else if (my_state == COUNTING_DOWN) {
printf("Press 's' to stop counting down.\nPress 'q' to end program.\n\n");
}
}
return 0;
}
#包括
#包括
typedef枚举{已停止,向上计数,向下计数}状态;
int main()
{
/*声明变量*/
陈述我的状态;
时间1,时间2;
字符c;
双倍时差,经过的时间;
/*初始化变量*/
经过的时间=0;
我的状态=停止;
/*显示信息*/
printf(“按'u'开始计数,或按'd'开始计数。\n按'q'结束程序。\n\n”);
而(1)
{
c=getchar();
time1=time2;
时间2=时间(0);
如果(c='u'&&my_state==STOPPED){
我的状态=计数;
printf(“开始计数。\n”);
}
else if(c='d'&&my_state==STOPPED){
我的状态=倒计时;
printf(“开始倒计时。\n”);
}
else if(c='s'&&my_state==COUNTING_UP){
我的状态=停止;
时间差=差分时间(时间2,时间1);
所用时间+=时间差;
printf(“停止计数。已计数%.0f秒。\n”,时差);
}
else if(c='s'&我的状态==倒计时){
我的状态=停止;
时间差=差分时间(时间2,时间1);
经过的时间-=时间差;
printf(“停止倒计时。倒计时%.0f秒。\n”,时差);
}
else如果(c=='q'){
printf(“程序正在关闭。\n”);
打破
}
否则{
继续;
}
/*显示信息*/
printf(“总计数:%.0f秒\n”,经过的时间);
如果(我的状态==停止){
printf(“按'u'开始计数,或按'd'开始计数。\n按'q'结束程序。\n\n”);
}
else if(我的状态==计数){
printf(“按's'停止计数。\n按'q'结束程序。\n\n”);
}
else if(我的状态==倒计时){
printf(“按's'停止倒计时。\n按'q'结束程序。\n\n”);
}
}
返回0;
}
作为旁白,如果您提交正确缩进的代码,我们所有人都将能够更好地帮助您。这很难理解。如果我将up-down和stop-If-else语句改为while循环,这行得通吗?我不会这么做。只需使用标志
即可存储秒表的运行方向。在u
和d
键上,更改标志的值。去掉if(flag==0)
并根据flag
的值更改每个循环上经过的时间。如何更改状态..?我改进了答案并添加了工作代码。我希望它现在变得更清晰。这是一个惊人的帮助。如果我想在秒表向上或向下计数时显示它的计数,我将如何进行?