c - 为什么在我通过 1 小时标记后,你会卡住最后几秒

标签 c

我决定用 C 语言制作时钟作为我的第一个“项目”,在 60 秒标记后更改分钟进展顺利,但是当我需要在几分钟后更改小时数时,我的第二秒数不会重置,因此它会停留在数字 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;
}

最佳答案

问题原因:当行变短时,前一行较长的字符仍保留在屏幕上。

解决方案 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);

关于c - 为什么在我通过 1 小时标记后,你会卡住最后几秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74661780/

相关文章:

python - 如何处理 GSL 集成中的错误

C 带链表的多文件程序,删除节点

c - 处理二维数组时出现总线错误

c - 如何用标准C实现消息队列

C 编程结构/动态内存

c++ - fcntl() 中的第三个参数是什么

c++ - 初学者用 Python 扩展 C(特别是 Numpy)

c - 为什么在我下面的例子中它只需要最后 4 位?

sql - 简单的 C 库访问 MySQL

c - 堆和栈段