2017-02-11 2 views
2

collègues! J'ai essayé d'utiliser la fonction sleep() dans mon code avec la fonction system(). Le code est censé afficher le premier message, puis compter à rebours, à chaque fois imprimer le nombre de secondes restantes et attendre 1 seconde. Ensuite, l'écran devrait être effacé. Je veux faire juste une simple animation de texte. Mais le programme ne fonctionne pas comme prévu! J'ai vérifié mon code et il semble que je n'ai aucune syntaxe ou erreur logique. Lorsque je compile et exécute ce code, il attend d'abord cinq secondes, puis imprime le message sur stdout sans même attendre et efface immédiatement l'écran. Je pense que c'est une erreur d'exécution, bien que cela ne devrait pas se produire logiquement. Si les informations suivantes sont pertinentes, je compile et exécute mes programmes C++ à partir du terminal Linux.Fonction C++ sleep() ne fonctionne pas comme prévu

#include <iostream> 
#include <cstdlib> // includes system(); 
#include <unistd.h> // includes sleep(); 
using std::cout; 
using std::cin; 
using std::endl; 

int main() { 
    cout << "Clearing the screen in: "; 
    for (int i = 5; i > 0; i--) { 
    cout << i << " "; 
    sleep(1); // takes seconds 
    } 
    system("clear"); 

    return 0; 
} 

Répondre

5

La sortie est normalement tamponnées, et ne sortira pas jusqu'à ce que le tampon est plein ou le fichier est fermé. Vous devez flush la sortie.

cout << i << " " << std::flush; 
3

cout est tamponnées il sauve l'entre-deux choses que vous imprimez et de les imprimer à la fois quand il flush.

Vous pouvez ajouter << std::endl; à la ligne qui imprime i ou sinon vider le tampon manuellement.