C -> scanf() nicht benutzen. Alternativen?

Hallo an alle!

Ich nutze vermengt gets() und scanf() jeweils zur Eingabe über Konsole und komme nur hin, wenn ich eine Funktion schreibe, die den stdin von \n (bzw. Enter-Taste-Eingabe), wieder befreit.

Nun habe ich gelesen:
„Sie verwenden scanf() erst gar nicht und greifen auf eine der vielen anderen Standardeingaben-Funktionen zurück. Ideal wäre es beispielsweise die Funktion fgets() zum Einlesen zu verwenden und diese Eingabe mit der Funktion sscanf() in ein entsprechendes Format zu konvertieren.“

Hmm, aber irgendwie hänge ich. Ich habe bisher einen Buchstaben so eingelesen:

char ein;
scanf("%c", &ein);
switch (ein) {
 case '1': { ... }
 /\* ... \*/
}

Wie kann ich denn jetzt dafür fgets() und sscanf() verwenden?

Gruß PHANTOM

Hi Phantom.

Versuchs einfach mal mit getchar().
Die gibt dir den gelesenen character als int zurück, oder einen Fehlercode.

Gruß
re-G

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!

Versuchs einfach mal mit getchar().

-> Das geht nicht. Wenn der folgende Code ausgeführt wird, so wird wenn man die 1 eingibt, wird die nachfolgende Eingabe übersprungen!

#include 

int main(int argc, char\* argv[]) {
 int beenden = 0, eingabe;
 char line[128];

 while(!beenden) {
 printf("\n");
 printf("1\n");
 printf("2\n");
 printf("3 Programm beenden\n");
 printf("Auswahl: ");
 //fgets(line, 128, stdin);
 //sscanf(line, "%i", &eingabe);
 switch (getchar()) {
 case '1': {
 printf("1\n");
 break;
 }
 case '2': {
 printf("2\n");
 break;
 }
 case '3': {
 beenden = 1;
 break;
 }
 default: {
 printf("\nKeine korrekte Zahl!\n");
 break;
 }
 }
 }

 return 0;
}

Gruß PHANTOM

Hallo!

Versuchs einfach mal mit getchar().

-> Das geht nicht. Wenn der folgende Code ausgeführt wird,
so wird wenn man die 1 eingibt, wird die nachfolgende Eingabe
übersprungen!

Gruß PHANTOM

Hi
Was meinst du mit übersprungen?
Wird andauernd eine 1 ausgegeben?
Oder wird die Eingabe als ungültig erkannt?
Gruß
re-G

Ich konnte es mittlerweile mit einem fgets und nachfolgendem sscanf lösen.

Es wurde bei getchar() anscheinend noch das \n im stdin gehalten, und so wurde die nachfolgende Eingabe übersprungen.

Danke + Gruß PHANTOM