Последовательный вывод букв одна за другой
Как сделать так, чтобы слово не появилось сразу, а буква за буквой.
В коде ниже Hello World!
появляется сразу и полностью.
Я пишу на cxxdroid, так как пк нет у меня и использую версию c++ 17
.
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <ctime>
using namespace std;
int main(int argc, char *argv[]) {
char textSleep[] = {'h','e','l','l','o','w','o','r','l','d','!'};
int j = sizeof(textSleep)/sizeof(char);
for(int i = 0; i < j; i++) {
cout << textSleep[i];
Sleep(200);
}
return 0;
}
Ответы (2 шт):
Автор решения: CameL
→ Ссылка
Функция
Sleep()
относится к библиотеке<windows.h>
. А значит по понятнам причинам, на linux и онлайн - компиляторах работать не будет. Как вариант замены - библиотека<unistd.h>
, и функцияusleep()
Если мы хотим вывести в одну строку, то необходимо очищать буфер, тк иначе все выведется моментально. Для этого можно использовать, библиотеку
<stdio.h>
и функциюfflush(stdout)
Код программы:
#include <iostream>
#include <ctime>
#include <unistd.h>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[]) {
char textSleep[] = {'h','e','l','l','o','w','o','r','l','d','!'};
int j = sizeof(textSleep)/sizeof(char);
for(int i = 0; i < j; i++) {
cout << textSleep[i] << " ";
usleep(20000);
fflush(stdout);
}
return 0;
}
Автор решения: needKVAS
→ Ссылка
Ожидание можно сделать и средствами стандартной библиотеки.
#include <iostream>
#include <chrono>
#include <thread>
int main(int argc, char *argv[]) {
char textSleep[] = {'h','e','l','l','o','w','o','r','l','d','!'};
int j = sizeof(textSleep)/sizeof(char);
for(int i = 0; i < j; i++) {
std::cout << textSleep[i] << std::flush;
//или std::cout.flush();
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
return 0;
}