Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程:我想让我的秒表连续,但当按下一个键时,它似乎只在一秒钟内递增并停止_C - Fatal编程技术网

C编程:我想让我的秒表连续,但当按下一个键时,它似乎只在一秒钟内递增并停止

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

因此,我的代码执行秒表功能。当我按D键或U键时,我希望秒表计数上升或下降。它这样做了,但只做了一秒钟就停止了。我如何使它连续。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
的值更改每个循环上经过的
时间。如何更改状态..?我改进了答案并添加了工作代码。我希望它现在变得更清晰。这是一个惊人的帮助。如果我想在秒表向上或向下计数时显示它的计数,我将如何进行?