C ++-字符数组输出删除循环错误

时间:2018-11-12 16:08:05

标签: c++ c++11

我希望创建一个函数来一次删除一个字符数组输出。字符数组是预定义的,但是有问题。

void anim_rev(char str[])
{
    clrscr();
    int i;

    for(i = 1; str[i] != '\0'; i++)
    {
        cout << "\b \b";
        delay(25);
    }
}

首先对所有迭代执行cout语句,然后执行delay。该功能应该每10或25毫秒从屏幕上删除一个字符。

请帮助修复它。

2 个答案:

答案 0 :(得分:0)

std::cout使用缓冲区,通常在有std::endl时刷新缓冲区。

如果您强行使用flush中的std::cout,则应该可以。

以下是如何刷新示例的文档: https://en.cppreference.com/w/cpp/io/basic_ostream/flush

答案 1 :(得分:0)

尝试以下操作,注意每个flush末尾的cout

否则,它将仅在行的末尾或程序的末尾写入。

注意:delay不是标准功能,因此我改用sleep

#include <iostream>
#ifdef WIN32
#include <Windows.h>  
#define sleep(X) Sleep(X*1000)  
#else
#include <unistd.h>
#endif
using namespace std;


void anim_rev(const char str[])
{
    int i;

    for(i = 0; str[i] != '\0'; i++)
    {
        cout << "\b" << " " << "\b"<<flush;
        sleep(1);
    }
} 
int main(void) 
{
    const char* p="Helooooooo";  
    cout<<p<<flush;
    anim_rev(p);
    return 0;
}