Problem mit scanf und char
-
Hi,
hab 'n kleines Problem mit einer Übungsaufgabe die wir machen sollen.
Sollen ne verkettete Liste in Vektor-Implementierung bauen.Das selbst ist auch nicht mein problem, das klappt eigentlich alles.
Habe allerdings mit scanf am Anfang ein Problem
Hier mal mein Code
#include "function.h" int main(void) { etype liste[L_SIZE]={1,2,3,6,12,18,36,72,144,288}; int i = 0,j=0, übergabew = 0, pos, wahl2; char op, wahl; printf("Welche Aktion ausfuehren? Einfuegen (E) oder Loeschen (L)?"); scanf("%c", &op); if (op == 'E') { printf("Variables einfuegen (a) oder einfuegen an [0] (b)? "); scanf("%c", &wahl); wahl:if (wahl == 'a') { printf("Bitte Position eingeben: "); scanf("%i", &pos); } else if (wahl == 'b') { pos = 0; } else { printf("Error: Keine gueltige Auswahl!"); return EXIT_FAILURE; }; printf("Bitte Wert eingeben: "); scanf("%i", &übergabew); insert(liste, pos, übergabew); printf("Weitere Werte eingeben (1/2)? "); scanf("%i", &wahl2); if (wahl2 == 1) { goto wahl; } else if (wahl2 == 2) { } else { printf("Keine gueltige Auswahl!"); return EXIT_FAILURE; }; } else if(op == 'L') { printf("Objekt an welcher Position löschen?"); } else { printf("Keine gueltige Auswahl! Programm wird beendet!\n"); return EXIT_FAILURE; } output(liste); return EXIT_SUCCESS; }
etype ist
typedef int etype;
So, ich frage doch in der ersten IF-Abfrage ab, ob die Char-Variable op == 'E' ist, bzw. 'L'
Ok, das klappt auch, das liest er ein.
Nehmen wir an ich gebe 'E' ein.Dann käme ja ne 2te If-Abfrage, bei welcher er allerdings die scanf überspringt.
Einer von euch ne Idee warum? Liest er da vllt irgendwie das \n in den 2ten Char ein?!Ach so, in RTFM!... standen ja noch so ein paar Fragen die man beantworten sollte
Wissensstand: Naja, C mach ich seit nehm halben Jahr ungefähr, macht eigentlich auch spaß...aber wie ich meinen wissensstand einschätzen soll? kA
Ziel: steht ja oben schon
Versuche das Problem zu lösen:
-Habe aus der Char-Abfrage mal ne Int-Abfrage gemacht --> Da gehts einwandfrei...Problem mit dem Eingabepuffer?
Quellen: C-Tuts im Netz halt...Schon mal danke für die Hilfe
-
Kuckuck !
Pack mal die Zeile ! hinter ! die scanf-Aufrufe:
while ((c = getchar()) != EOF && c != '\n');
-
Danke
Hab die kleine Zeile eingefügt, funzt.Könntest du mir noch kurz erklären was in der schleife passiert?
-
Kurzfassung: Damit entsorgst du die Reste der vorherigen Eingabe aus dem Eingabepuffer.
Ausführlicher: Nach einem scanf-Aufruf bleiben Whitespaces (und besonders das \n aka ENTER) im Tastaturpuffer zurück und werden beim nächsten Lesebefehl abgeholt. Die obige Schleife liest und verwirft den Rest der Eingabezeile, so daß der nächste Befehl von einem jungfräulichen Eingabepuffer ausgehen kann.
-
Ok, danke schön
Und danke auch noch mal für die schnelle Hilfe.