2017-04-02 6 views
2

Nach der letzten Woche auf Xcode 8.3 aktualisiert, in einem C/C++ Programm die Ausgabe von einer printf Anweisung nicht mehr auf dem Bildschirm ohne eine Zeilenumbruch angezeigt. Daher kann ich den Benutzer nicht auffordern, eine Nummer einzugeben, und sie müssen diese Nummer in derselben Zeile eingeben, die der Eingabeaufforderung folgt.In Xcode 8.3 Update, C/C++ Programmierung printf gibt keine Ausgabe ohne Zeilenumbruch

Weder die Ausgangspuffer Spülung [fflush(stdout) oder cout << endl] noch den Ausgabepuffer [setbuf(stdout, NULL)] behebt dieses Problem auf NULL Einstellung, sondern ist eine Frage speziell über Xcode 8.3 scheinbar gebrochen.

Mit dem scanf Kommentar gesetzt, die Ausgabe des Programms ist unten:

Enter a value for x: Value of x is: 0 

Mit scanf anstelle der Ausgabe von der ersten printf nie auftaucht. Wenn Sie fortfahren und einen Wert eingeben und die Eingabetaste drücken, wird nur und dann angezeigt. Die Ausgabe ist:

3 
Enter a value for x: Value of x is: 3 

Volltestprogramm ist hier:

#include <iostream> 
using namespace std; 

int main() { 
    int x=0; 
    printf("Enter a value for x: "); 
    //scanf("%d", &x); 

    printf("Value of x is: %d\n", x); 
    return 0; 
} 

Meine Behelfslösung war zu Xcode um wieder zurück 8.2.1, heruntergeladen von developer.apple.com/xcode/downloads/

+0

Ich bin ziemlich sicher, dass das Standardverhalten (nicht Standard definierte, aber typisch), bis ein Newline nicht zu spülen ist geschrieben wird, puffern, so viel Inhalt wie möglich (es sei denn, es ist natürlich explizit geleert) –

+0

Funktioniert es, wenn Sie 'stdout' spülen? Ich frage, weil wir eine wirklich ähnliche Frage mit 'std :: cout 'in C++ hatten, wo XCode nicht druckt (ungeachtet des Errötens), bis ein Zeilenumbruch hinzugefügt wird: http://stackoverflow.com/questions/43158839/ c-not-show-cout-in-xcode-konsole-aber-läuft-perfekt-in-terminal Bitte fügen Sie einen Zeilenumbruch hinzu und teilen Sie uns mit, ob Ihr Problem weiterhin auftritt. EDIT: Bitte versuchen Sie auch zu 'stderr' zu drucken, wie vorgeschlagen in der Frage @NobodyNada posted einen Link zu. – datell

+2

Dies ist kein C-Code, sondern anscheinend C++. Verwenden Sie die richtigen Tags und bearbeiten Sie Ihren Text! – Olaf

Antwort

3

8.3.2 wurde gestern Abend bekannt, und adressiert diese angeblich:

enter image description here

+0

Bestätigt, es ist an meinem Ende in 8.3.2 behoben. –

2

Es ist Standardverhalten in C, dass stdout beim Aufruf einer Eingabefunktion wie scanf() geleert wird, unabhängig davon, ob vor dem Aufruf eine Zeilenschaltung ausgegeben wurde oder nicht. Dies stellt sicher, dass alle geeigneten Ausgaben angezeigt werden, bevor der Eingabevorgang stattfindet. Daher könnte das Update etwas in Xcode beschädigt haben. Obwohl ich momentan nicht sicher bin, was die genaue Art des Problems ist, ist eine (temporäre) Problemumgehung, Ihre Anwendung in der Befehlszeile auszuführen. Das hat für meine Projekte funktioniert. Es zeigt auch, dass dieses Problem mit dem Xcode-Ausgabefenster und nicht mit dem Compiler oder etwas anderem auftritt.

Als Antwort auf Tell's Kommentar: Nein, Spülung stdout das Problem in Xcode nicht behoben. Dies impliziert noch stärker, dass das Problem definitiv in der Xcode-Schnittstelle selbst liegt. Wenn Sie die Anwendung über die Befehlszeile ausführen, funktionieren Aufrufe von fflush() wie erwartet.

Auch das Drucken auf stderr macht keinen Unterschied innerhalb von Xcode. Grundsätzlich sollte stdout in diesem Fall geleert werden ohne an stderr oder andere Gimmicks zu appellieren, da das OP scanf() aufruft. Es funktioniert perfekt von der Kommandozeile ... nur nicht im Xcode-Ausgabefenster.

Und bitte beachten Sie diese Frage ist nicht ein ein Duplikat: Es hat nichts damit zu tun Missverständnisse von jemandem, wie C-Eingabe und Ausgabe arbeiten, und alles damit zu tun, dass ein aktuelles Update auf Xcode etwas kaputt gemacht hat.

EDIT:

Danke, joe_04_04. Das Update scheint das Problem behoben zu haben.

+0

Vielen Dank. Ich stimme dir zu: Dies ist kein Duplikat und scheint wirklich ein seltsames Verhalten von XCode zu sein. Denken wir daran und testen Sie es, sobald das nächste XCode-Update kommt. – datell

+0

Ich habe das gerade auch bemerkt. Ich habe diesen Beitrag nicht gesehen, als ich meinen gemacht habe: http://stackoverflow.com/questions/43484206/xcode-stdcout-output-acting-odd –

+0

Awesome. Ich bin froh, dass das tatsächlich behoben wurde. Apple adressiert nicht immer Fehler in ihrer Software. Das hätte mich getötet, wenn es unbehandelt wäre. –

Verwandte Themen