printf
-
Hallo,
ich habe eine Frage zu printf: Und zwar funktioniert die Ausgabe nicht richtig, wenn danach noch scanf oder getchar kommt, z.B.:printf("D: Determinante");
a = getchar();Dann wird printf erst NACH getchar ausgeführt, was ja nicht Sinn der Sache ist. Könnt ihr mir einen Tipp geben, wie man das Problem beheben kann?
Danke im Voraus!
-
mach vorher
fflush(stdout);
-
lulux schrieb:
Hallo,
ich habe eine Frage zu printf: Und zwar funktioniert die Ausgabe nicht richtig, wenn danach noch scanf oder getchar kommt, z.B.:printf("D: Determinante");
a = getchar();Dann wird printf erst NACH getchar ausgeführt, was ja nicht Sinn der Sache ist. Könnt ihr mir einen Tipp geben, wie man das Problem beheben kann?
Danke im Voraus!wie merkst du das ? das kann normaler weise nicht sein. zeig doch bitte mal etwas mehr quellcode.
-
rüdiger schrieb:
mach vorher
fflush(stdout);
Wie kann man soetwas nur weiterempfehlen? *Grusel*
@lulux:
Nehme einfach die Funktion fprintf.
Der Aufruf bei dir müsste dann so aussehen:
fprintf( stderr, "D: Determinante" );Erläuterung:
prinft verwendet nur das stdout das bekanntermaßen gebuffert ist.
Da das "stderr" ungepuffert ist, wird es SOFORT ausgegeben.Mehr zu dem Thema findest du unteranderem hier: http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_018_008.htm
Gruß,
KörperKlaus
-
<°)))o>< troll dich.
@OP: nimm
fflush( stdin );
greetz, Swordfish
-
Hä ? fflush ? Pfusch ? stderr ? Bahnhof ?
! Bahnhof !
Seit wann darf mal eben kurz ne Zeile im Programmablauf vorgezogen werden ?
-
proggingmania schrieb:
Seit wann darf mal eben kurz ne Zeile im Programmablauf vorgezogen werden ?
Wer macht denn sowas?
Pufferung hat doch nix mit dem Programmablauf zu tun. Hier wird halt zuerst "D: Determinante" in den Ausgabepuffer von stdout geschrieben, und danach ein Zeichen gelesen. Dass aber unmittelbar beim Schreiben in den Puffer dieser auch auf den Bildschirm gebracht werden muss, davon steht nix im Standard.
-
LordJaxom schrieb:
Dass aber unmittelbar beim Schreiben in den Puffer dieser auch auf den Bildschirm gebracht werden muss, davon steht nix im Standard.
Unmittelbar beim Schreiben erwartet man ja auch nicht unbedingt, aber wenigstens nach dem Einlesen.
printf("D: Determinante"); // jetztNagut, dann schreiben wir die Schose ein paar dutzend Zeilen später auf den Schirm, wen juckts.
-
proggingmania schrieb:
Unmittelbar beim Schreiben erwartet man ja auch nicht unbedingt, aber wenigstens nach dem Einlesen.
-
Swordfish schrieb:
proggingmania schrieb:
Unmittelbar beim Schreiben erwartet man ja auch nicht unbedingt, aber wenigstens nach dem Einlesen.
Während die Buchstaben der Zeichenkette "D: Determinante" lustig vor sich hin in Richtung stdout-Puffer wandern, während dessen muss meinetwegen nichts auf dem Bildschirm zu sehen sein.
Spätestens jedoch wenn die Programmzeile zu ende ist, spricht, wenn das Semikolon dem Compiler über den Weg läuft.
fprintf( stderr, "D: Determinante" ); // <-- dadda
Und mit Sicherheit vor der nächsten Zeile.
Also vor der da: a = getchar();Nicht wahr doch.
-
proggingmania schrieb:
Während die Buchstaben der Zeichenkette "D: Determinante" lustig vor sich hin in Richtung stdout-Puffer wandern, während dessen muss meinetwegen nichts auf dem Bildschirm zu sehen sein.
Spätestens jedoch wenn die Programmzeile zu ende ist, spricht, wenn das Semikolon dem Compiler über den Weg läuft.Im Puffer ist die Zeichenkette nach dem Funktionsaufruf. Aber wann sie auf den Bildschirm kommt, steht in anderen Büchern.
greetz, Swordfish
-
Das ist aber dooof.
-
hmm.. hab sowas noch nie erlebt...
in welchem Buch steht das den?
-
Hi,
sowas ist ganz normal.
Schonmal versucht unter Linux mit printf zu debuggen (zu sehen, wo das Programm aussteigt) wenn es einen Segmentation fault gibt? Da kann man sich nen Wolf suchen, weil der Text zwar in den Puffer geschrieben wird, aber nicht auf dem Bildschirm landet...
Einfache Abhilfe: Ans Ende der Ausgabe einen '\n' dran, das ist das Zeichen für das Betriebssystem den Puffer auszugeben.
Also einfach ein 'printf("D:Determinante\n"); und schon gehts.Viele Grüße