Ich beobachtete etwas Verhalten, das ich mir nicht erklären kann, wenn ich printf verwende, um ein Zeichen über Format-String zu drucken. Es scheint, dass, wenn das Zeichen newline ('\ n') ist, der printf ignoriert alles bis zu (einschließlich) '% c' und nur den verbleibenden Teil druckt.Printf ignoriert teilweise Formatzeichenfolge beim Drucken von Zeilenumbruch über '% c'
Hier ist ein minimal Beispiel (Benutzereingabe Optimierung deaktivieren):
#include <stdio.h>
int main(){
int c;
scanf("%d", &c); //read char by ascii id
printf("FOO%cBAR (id %i)\n", c,c);
return 0;
}
45 eingeben (der Code für die '-') resultiert in der Ausgabe "foo-BAR", aber 13 ('\ n Eingabe ') druckt nur "BAR". Dies geschieht sowohl in gcc 6.3.1 als auch in clang 3.9.1, auf -Og- und -O3-Optimierungsebenen, auf einem Linux.
Dies sollte nicht mit der Ausgangspufferung verbunden sein, wenn ich mich nicht irre.
Ist dieses Verhalten beabsichtigt?
Das ist, weil Zeichen 13 "Wagenrücklauf" ist. Es überschreibt also den ersten Teil. Newline ist Character 10. –
13 ist '\ r' nicht' \ n' –
Oh, ich habe '\ r' (13) und '\ n' (10) verwechselt. Die eigentliche Frage ist also, warum mein Programm über ein '\ r' gestolpert ist; Ich habe möglicherweise nicht den Textmodus verwendet, um meine Datei zu öffnen. Ich würde Wetterfahne akzeptieren, wenn sein Kommentar eine Antwort wäre. –