问:在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
覆盖 10
。 0
仍然未被发现。例如,您可以在之后用 space 修复它。
我创建了一个像倒计时一样工作的程序,但我 运行 出错了: 一切都打印正常,直到秒数下降(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
覆盖 10
。 0
仍然未被发现。例如,您可以在之后用 space 修复它。