2017-09-06 3 views
0

Ich bin ein Anfänger Programmierer C eingeführt und ich vermisse etwas grundlegend über die Art, wie meine scanf() funktioniert. Ich möchte wie diese ein einzelnes int von der Tastatur mit Code lesen:Woher liest scanf() Eingaben, wenn nicht von der Tastatur?

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    int userBookSelection; 
    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

Wenn ich den Code ausführen, die Konsole bleibt schwarz, bis ich das Debuggen stoppen. Es gibt niemals einen Cursor, der auf eine Tastatureingabe wartet. Wenn ich Debug stoppen kann ich diese Ausgabe in der Konsole sehen, die gleichen jedes Mal: ​​

Druck userBookSelection: 2130567168

ich mit MinGW GCC Compiler unter Windows in Eclipse bin Debuggen. Die Codesyntax scheint korrekt zu sein - ist es möglich, dass in meinem Build-Pfad etwas falsch ist, um dies zu ermöglichen? Ich muss wissen, warum scanf() nicht für Tastatureingabe liest.

+0

Wie läuft der Code? – SLaks

+1

Es funktioniert wie beabsichtigt, wenn ich Ihren Code ausführen – Tyler

+0

Das Programm wie gezeigt ist korrekt ISO C (bis zu einem Punkt: 'scanf' ist gebrochen-wie angegeben, und sollte nie in der Produktion verwendet werden - aber für diese Art des Lernens Übung ist in Ordnung) und sollte wie vorgesehen funktionieren. _Exactly_ welcher Compiler, Debugger, Konsole, Betriebssystem usw. verwenden Sie? Lass nichts aus. – zwol

Antwort

0

Also habe ich eine Codezeile von meinem Professor bekommen, die sich um diesen Fehler kümmert - ob es eine notwendige Lösung speziell für Eclipse und/oder MinGW ist, bin ich mir nicht sicher. In jedem Fall ist hier der Code mit der zusätzlichen Zeile:

int main(void) { 
    int userBookSelection; 
    setvbuf (stdout, NULL, _IONBF, 0);//<---The magic line 

    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

ich zusätzliche Weisheit schätzen würde auf, was los ist, was setvbuf() tut und wie scanf() funktioniert mehr grundlegend.

+0

Das muss eine Eigenart von Eclipse, MinGW und/oder Windows "Konsolen" sein - nur mit der C-Spezifikation, die Anwendung von 'setvbuf' auf' stdout' sollte keinen Effekt auf einen Aufruf von 'scanf' haben (was funktioniert nur mit 'stdin'). Ich kann dir nicht weiter helfen. – zwol

Verwandte Themen