C ++ - вывод массива символов удалить ошибку цикла - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу создать функцию для удаления вывода массива символов, по одному за раз. Массив символов предопределен, но есть проблема.

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 голосов
/ 12 ноября 2018

Попробуйте следующее, запишите 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;
}
0 голосов
/ 12 ноября 2018

std::cout использовать буфер, и обычно он очищает буфер при наличии std::endl.

Если вы заставите flush из std::cout, это должно сработать.

Вот документация о том, как смывать с примером: https://en.cppreference.com/w/cpp/io/basic_ostream/flush

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...