myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

cout Problem

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 10.11.12, 20:34   #1
sidious80
Sith-Lord
 
Benutzerbild von sidious80
 
Registriert seit: Mar 2011
Beiträge: 58
Bedankt: 8
sidious80 ist noch neu hier! | 0 Respekt Punkte
Standard 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
sidious80 ist offline   Mit Zitat antworten
Ungelesen 10.11.12, 20:59   #2
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

Nimm das " << endl" weg.
Das sagt, dass die Zeile zu ende ist (end line) und sorgt für einen Zeilenumbruch.
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 10.11.12, 21:07   #3
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von your_conscience Beitrag anzeigen
nimm das " << endl" weg.
Das sagt, dass die zeile zu ende ist (end line) und sorgt für einen zeilenumbruch.
rofl?
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 10.11.12, 21:16   #4
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

Was ist so lustig?
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 10.11.12, 21:35   #5
sidious80
Sith-Lord
 
Benutzerbild von sidious80
 
Registriert seit: Mar 2011
Beiträge: 58
Bedankt: 8
sidious80 ist noch neu hier! | 0 Respekt Punkte
Standard

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?
sidious80 ist offline   Mit Zitat antworten
Ungelesen 10.11.12, 22:52   #6
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 11.11.12, 09:52   #7
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

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 Mitglieder sichtbar. Bitte einloggen oder neu 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...)
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 11.11.12, 15:39   #8
sidious80
Sith-Lord
 
Benutzerbild von sidious80
 
Registriert seit: Mar 2011
Beiträge: 58
Bedankt: 8
sidious80 ist noch neu hier! | 0 Respekt Punkte
Standard

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
sidious80 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.


Sitemap

().