问:在C++代码中使用“\r”后打印剩余0

Q: remaining 0 printed after using "\r" in C++ code

我创建了一个像倒计时一样工作的程序,但我 运行 出错了: 一切都打印正常,直到秒数下降(counter.second)低于 10,然后它打印 90 而不是 9(或 09),80 而不是 8 等等。

如果我删除“\r”,“剩余时间文本”将逐个打印“计数器”次数,没有此错误,但这会填满我的 cmd,这更糟。

除此之外,一切正常。

关于如何解决这个问题有什么想法吗?

#include <iostream>
#include <windows.h>

int main() {
    std::pair<int, int> counter;
    std::pair<int, int> aux;

    std::cin >> counter.first;
    std::cin >> counter.second;

    while (1) {

        aux.first = counter.first;
        aux.second = counter.second;

        while (aux.first >= 0 && aux.second >= 0)
        {
            std::cout << "\rTime remaining: " << aux.first << ":" << aux.second << std::flush;
         
            Sleep(1000);  

            if (aux.second == 0) {
                aux.first--;
                aux.second = 60;
            }
            aux.second--; 
        }
        PlaySound(TEXT("retro.wav"), NULL, SND_ASYNC);
    }

    return 0;
}

嗯,来看看: 如果你写

I like cats.

然后用

覆盖
I like dogs.

一切都很好。 但是如果你用

覆盖它
I like.

然后是猫。保持未被发现。

I like.cats.

事情是这样的。 您尝试用 9 覆盖 100 仍然未被发现。例如,您可以在之后用 space 修复它。