RoseFlunder
Lieutenant
- Registriert
- Sep. 2009
- Beiträge
- 799
Hallo,
ich fange gerade an mich mit C zu beschäftigen und in einem ersten Tutorial geht es um die Ein- und Ausgabe auf der Konsole.
Ich programmiere unter Windows 7 und benutze als Compiler MinGW und als IDE Eclipse.
Ich habe ein neues C-Projekt angelegt und MinGW als Toolchain festgelegt.
Hello World funktionierte soweit auch ganz gut.
Nun ist folgendes Beispiel im Tutorial aufgetaucht:
Dies funktionierte nicht wie angedacht, wurde aber auch gleich erklärt.
Da die Eingabe gepuffert wird, wird beim 2. scanf Aufruf \n zurückgeliefert.
Ich kann also im Prinzip nur den 1. und 3. Buchstaben eingeben.
Folgende Lösung wird vorgeschlagen:
Nun verstehe ich das so, dass zwei Zeichen mit fgets eingelesen werden und ich mir daraus mit sscanf den Buchstaben holen kann, da dies auf %c passt. Das \n wird also ignoriert.
In der Theorie sollte es jetzt gehen, aber in der Praxis erlebe ich genau das gleiche Verhalten wie mit der ersten Variante
Woran scheitert es jetzt?
Mache ich noch etwas falsch?
LG
ich fange gerade an mich mit C zu beschäftigen und in einem ersten Tutorial geht es um die Ein- und Ausgabe auf der Konsole.
Ich programmiere unter Windows 7 und benutze als Compiler MinGW und als IDE Eclipse.
Ich habe ein neues C-Projekt angelegt und MinGW als Toolchain festgelegt.
Hello World funktionierte soweit auch ganz gut.
Nun ist folgendes Beispiel im Tutorial aufgetaucht:
Code:
#include <stdio.h>
int main(void) {
char a, b, c;
printf("Test#1 \n");
printf("1. Buchstabe : ");
scanf("%c", &a);
printf("2. Buchstabe : ");
scanf("%c", &b);
printf("3. Buchstabe : ");
scanf("%c", &c);
printf("Sie gaben ein : %c %c %c", a, b, c);
return 0;
}
Dies funktionierte nicht wie angedacht, wurde aber auch gleich erklärt.
Da die Eingabe gepuffert wird, wird beim 2. scanf Aufruf \n zurückgeliefert.
Ich kann also im Prinzip nur den 1. und 3. Buchstaben eingeben.
Folgende Lösung wird vorgeschlagen:
Code:
#include <stdio.h>
int main(void) {
char a, b, c;
char buf[2];
printf("Test#1 \n");
printf("1. Buchstabe : ");
fgets(buf, 2, stdin);
sscanf(buf, "%c", &a);
printf("2. Buchstabe : ");
fgets(buf, 2, stdin);
sscanf(buf, "%c", &b);
printf("3. Buchstabe : ");
fgets(buf, 2, stdin);
sscanf(buf, "%c", &c);
printf("Sie gaben ein : %c %c %c", a, b, c);
fgets(buf, 2, stdin);
return 0;
}
Nun verstehe ich das so, dass zwei Zeichen mit fgets eingelesen werden und ich mir daraus mit sscanf den Buchstaben holen kann, da dies auf %c passt. Das \n wird also ignoriert.
In der Theorie sollte es jetzt gehen, aber in der Praxis erlebe ich genau das gleiche Verhalten wie mit der ersten Variante
Woran scheitert es jetzt?
Mache ich noch etwas falsch?
LG

