[C] scanf überdeckt Ausgabe

Servus!

Ich habe gerade angefangen C zu lernen, hab aber schon wieder erste Probleme:

Code:
int i;               /* Ein ganzzahliger Datentyp */
printf("Bitte geben Sie eine Zahl ein : ");
scanf("%d",&i);      /* Wartet auf die Eingabe */
printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
return 0;

Bei diesem Code bekomme ich folgenden "Programmablauf":

Code:
4
Bitte geben Sie eine Zahl ein : Die Zahl, die Sie eingegeben haben, war 4

Auch bei ähnlichen Programmen kommen immer zuerst alle Eingaben und danach erst die Ausgaben.

Ich verwende Eclipse mit MinGW unter Windows Xp.

Danke für eure schnelle Hilfe
MrSpider
 
Servus!

Das dürfte daran liegen, dass sich bereits Daten im Tasterturpuffer befinden.
Ein fflush(stdin) vor deinen scanf müsste reichen. ;)

mfg Binäru$
 
Gleiches Ergebnis, bei folgendem Code:

Code:
int i;               /* Ein ganzzahliger Datentyp */
printf("Bitte geben Sie eine Zahl ein : ");
fflush(stdin);
scanf("%d",&i);      /* Wartet auf die Eingabe */
printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
return 0;
 
Hmm

Hab leider schon sehr lange nichts mehr mit C programmiert, aber was mir noch auffällt ist:
scanf("%d",&i);
printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);

das "%d" steht für einen double Platzhalter.
Du verwendest jedoch nen Integerwert, also "%i" nicht "%d".

mfg
 
Ich weiss nicht wie du es verhindern kannst aber es ist eigentlich normal, dass bei einem scanf die Eingabe an der Stelle stehenbleibt wo der scanf war.

@Binäru$: nein das %d ist korrekt, est steht für decimal. Für double würde man z.B. %f benutzen.
 
am einfachsten wirds wohl sein wenn man ein \n an den anfang setzt:

Code:
printf("\nDie Zahl, die Sie eingegeben haben, war %d",i);
 
Auch so:

Code:
#include <stdio.h>

int main(void) {
	int i;               /* Ein ganzzahliger Datentyp */
	printf("Bitte geben Sie eine Zahl ein : ");
	fflush(stdin);
	scanf("%d",&i);      /* Wartet auf die Eingabe */
	printf("\nDie Zahl, die Sie eingegeben haben, war %d\n",i);
	return 0;
}

, kommt immer das heraus:

Code:
4
Bitte geben Sie eine Zahl ein : 
Die Zahl, die Sie eingegeben haben, war 4

Das Problem ist ja, dass wenn ich das Programm starte gleich auf eine Eingabe gewartet wird. Nachdem ich dann zB. 4 eingegeben habe kommen dann erst die zwei anderen Zeilen.

Das Programm habe ich eigentl 1:1 aus dem Buch "C von A bis Z"
 
Code:
#include <stdio.h>

int main(void) {
        int i;               /* Ein ganzzahliger Datentyp */
        printf("Bitte geben Sie eine Zahl ein : ");
        fflush(stdout);
        scanf("%d",&i);      /* Wartet auf die Eingabe */
        printf("Die Zahl, die Sie eingegeben haben, war %d\n",i);
        return 0;
}

%d ist decimal, %f ist float, %lf ist double :P
 
Frage:

Wieso geht das bei mir denn auch so?

Code:
#include <stdio.h>

int main(void)
{
	int i;
	printf("\nEingabe: ");
	scanf("%d",&i);
	printf("\nEingabe war: %d\n\n",i);
}
 
Die meisten C++ Compiler können auch mit C umgehen sofern das Projekt als solches kompiliert wird. Das was MrSpider sagen wollte ist, dass die Darstellung der In/Outputs je nach Compiler leicht abweichen kann, da manche weniger "streng" sind als andere.
 
Zurück
Oben