C语言 为什么你得到最后的秒数卡住后,我通过了1小时标记

pcww981p  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(123)

我决定使时钟在C作为我的第一个“项目”,改变分钟后60秒标记进行得很顺利,但当我需要改变小时后分钟我的secon秒数不会重置,所以它停留在数字9卡住,直到我去的点10秒。

#include<stdio.h>
#include<Windows.h>

int main ()
{
   int h = 0,m = 59, s = 55;
   int prekid = 1;
        while (prekid == 1)
        {
            printf(" \r H:%d | M: %d | S: %d",h,m,s);
            s++;
            fflush(stdout);
            if (s == 60)
            {
                m++;
                s= 0;
            }

            if (m == 60)
            {

                m = 0;
                s= 0;
                h++;
            }

            sleep(1);
        }

    return 0;
}
rbpvctlc

rbpvctlc1#

问题原因:当行变短时,前一较长行中字符仍保留在屏幕上
解决方案1,在格式字符串的末尾添加足够的空格,在本例中我相信是3,以覆盖多余的数字:

printf(" \r H:%d | M: %d | S: %d   ",h,m,s);

解决方案2,写入固定宽度的输出,此处使用前导零:

printf(" \r H:%02d | M: %02d | S: %02d",h,m,s);
tsm1rwdh

tsm1rwdh2#

Rathe比打印一个可变宽度的文本(并留下左-造成OP的麻烦),打印一个固定宽度:

// printf(" \r H:%d | M: %d | S: %d",h,m,s);
printf("\r H:%2d | M:%2d | S:%2d", h, m, s);

"%2d"指示printf()至少打印2个字符,并根据需要在左侧填充空格。

相关问题