C++ Typewriting Effect

Viewed 78

So I'm trying to make typewriting effect print in C++ and the error is the script give me the final result instead of the typewriting effect.

#include <iostream>
#include <stdlib.h>
#include <unistd.h>

int main() {
  std::string d1 = "\"Starting in 3, 2, 1...\"";
  for(int i = 0; i < sizeof(d1); i++){
    std::cout << d1[i];
    sleep(1);
  }
}
2 Answers

What with those other problems, everybody seems to have missed the point here, which is that std::cout is buffered (on most systems). So it is waiting for the newline before displaying the text. Try calling std::cout.flush() before every call to sleep().

First of all don't use sizeof(d1) which returns the size in bytes of the string but use d1.size() which return the length of the string. Also, I have no idea where did you get that sleep() function from. Use std::this_thread::sleep_for(std::chrono::milliseconds({time_in_milliseconds})); instead (you will need to #include <thread>).

Working example:

#include <iostream>
#include <string>
#include <thread>

int main() {
    std::string d1 = "\"Starting in 3, 2, 1...\"";

    for (int i = 0; i < d1.size(); i++) 
    {
        std::cout << d1[i];
        std::this_thread::sleep_for(std::chrono::milliseconds(500));
    }
}
Related