myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   cout Problem (https://mygully.com/showthread.php?t=2749007)

sidious80 10.11.12 20:34

cout Problem
 
Nabend,

ich versuche einen Satz in C++ Buchstabe für Buchstabe in einer Zeile auszugeben, mit einer kurzen Pause nach jedem Buchstaben.

Code:

for(int i = 0; i < 14; i++)
    {
        sleep(1);
        cout << satz[i];
    }

Mein Problem ist das die Schleife nicht jeden Buchstaben ausgibt sondern ca 14 Sekunden nichts macht und dann den ganzen Satz ausgibt. Jedoch versteh ich nicht wieso dieser Code nicht funktioniert.
Ich hab ihn etwas geändert um den Fehler zu finden.

Code:

]for(int i = 0; i < 14; i++)
    {
        sleep(1);
        cout << satz[i] << endl;
    }

Am Ende des "cout" das "endl" angehängt. Jetzt funktioniert die Ausgabe jedes einzelnen Buchstabens, jedoch wird dieser immer in einer neuen Zeile ausgegeben und nicht hintereinander weg.

Weiß vielleicht jemand woran dies liegt?

Gruß
sidious80

Your_Conscience 10.11.12 20:59

Nimm das " << endl" weg.
Das sagt, dass die Zeile zu ende ist (end line) und sorgt für einen Zeilenumbruch.

ProgMaster 10.11.12 21:07

Zitat:

Zitat von your_conscience (Beitrag 24010433)
nimm das " << endl" weg.
Das sagt, dass die zeile zu ende ist (end line) und sorgt für einen zeilenumbruch.

rofl?

Your_Conscience 10.11.12 21:16

Was ist so lustig?

sidious80 10.11.12 21:35

Das ist mir klar, dass das "endl" den Zeilenumbruch verursacht. Aber ich will wissen wieso erst mit dem "endl" es funktioniert das jeder Buchstabe nach einer Pause ausgegeben wird und ohne "endl" nicht?

Your_Conscience 10.11.12 22:52

Bei mir funktioniert es, welchen Compiler nutzt du denn?

Also bei folgendem Code:
Code:

char satz[14] = "12345678901234";

for(int i = 0; i < 14; i++)
{
        Sleep(1000);
        cout << satz[i];
}

wird bei mir immer ein Zeichen pro Sekunde ausgegeben.

Madddin_89 11.11.12 09:52

Buffering and flush

When you send output to a stream, it does not necessarily get printed immediately. Rather, it may wait in a buffer until some unspecified event, e.g. buffer full enough, reading from input, or exit from program. The details may vary.

Buffering makes it faster to print a large amount of output, particularly if you are producing the output bit-by-bit (e.g. one character at a time). However, it is a nuisance for output used in debugging (e.g. a statement that informs you that step 3 of your algorithm has been finished).

Forcing all buffered output to actually be printed is known as "flushing" the stream. A flush can be forced by calling the flush function associated with each output stream, inserting the magic variable flush into the stream, or inserting endl.

cout << flush;
cout.flush();
cout << endl;

Quelle: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

könnte dir bei deinem Problem evtl. helfen.

Eine weitere Möglichkeit wäre, dass "Sleep()" durch eine große for-schleife zu ersetzen, die einfach nichts macht.
(Mit Sleep gibt der Prozess seine Rechte beim Betriebssystem ab, also kann es auch vorkommen, dass der Output-Stream
erstmal lahmgelegt wird...)

sidious80 11.11.12 15:39

So wie es aussieht lag es am Compiler.
Ich hab das gleiche Programm unter einem anderen Compiler probiert und es funktioniert.

Super danke für die Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.