Announcement

Collapse
No announcement yet.

Eclipse mit C IDE. Problem mit stdio

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eclipse mit C IDE. Problem mit stdio

    Hallo,

    ich fange gerade neu an C zu lernen und erlebe direkt meinen ersten Rückschlag.
    Ich habe die C IDE für Eclipse installiert und es klappt alles super. Die Programme werden kompiliert und gestartet.
    Nur bei Eingabeaufforderungen habe ich Probleme. Wenn ich einen printf Befehl habe und danach etwas einlesen möchte wird der printf Befehl erst ausgeführt wenn die Tastatureingaben fertig sind.
    Code:
    #include <stdio.h>
    
    int main(void) {
    	printf("Zahl eingeben:");
    	int x = 0;
    	scanf ("%d", &x);
    	printf ("%d", x);
    	return 0;
    }
    Beim Ausführen bleibt die Konsole leer. Gebe ich eine Zahl ein, Spuckt es danach beide printf Befehle aus.
    So kann ich auch komplexere Programme schreiben, die mehrere Variablen einlesen. Aber die Konsole bleibt immer so lange leer bis alle Variablen eingetippt wurden.
    Das gleiche Problem besteht übrigens auch mit getchar.

    Schonmal Vielen Dank

    Jack

  • #2
    Was genau wuerdest Du denn erwarten? scanf dient dazu eine Eingabe in einem bestimmten Format entgegen zu nehmen. Die Eingabe wird dann beendet wenn Du Enter drueckst. Solang ist Dein Programm praktisch "angehalten". Weiterlaufen tut das Programm erst wenn Du mit Enter bestaetigst.

    Ein Beispiel und eine Referenz gibt es z.B. hier:

    http://www.cplusplus.com/reference/cstdio/scanf/

    Comment


    • #3
      Das

      printf("Zahl eingeben:");

      sollte vorher kommen....
      Christian

      Comment


      • #4
        Genau, der printf-Befehl wurde quasi erst ausgeführt nachdem eine Zahl entgegengenommen wurde. Hat man alle Zahlen eingegeben erschien erst dann der komplette Text in der Konsol (also auch die printf Befehle vor dem scanf.
        Das ganze scheint ein bug zu sein. Habe nach einigem suchen aber eine Lösung gefunden. Gibt man am Anfang des codes den Befehl
        Code:
         setvbuf(stdout, NULL, _IONBF, 0);
        ein, wird alles normal ausgegeben

        Comment

        Working...
        X