C Programmierung: Scanf-befehl funktioniert nicht nach If- Anweisung
Guten Tag habe da ein Problem bei einem Programm an dem ich gerade arbeite: Ich soll mit Kommandos (list, pop, push und exit) einen Stack mit zeichen füllen, das letzte zeichen löschen, eine Liste des Stacks ausgeben oder das Programm verlassen. Momentan funktioniert nur das verleassen des Programms, da der Scanf-befehl hinter der if-Anweisung nach dem Kompilieren nicht ausgeführt wird, um ein Zeichen einzulesen. (fgetc() hat auch nicht funktioniert).
Vielleicht kann mir ja jemand erklären woran es liegt.
Quelltext:
include include include define NSTACK 15int main(){ //Anfang Main
//Variablendeklaration char eingabe[6]; char stack[NSTACK]; char item; char z; //zwischenspeicher für zeichen int sp=0; //Ende Variablendeklaration
printf("\nStack auffüllen (bis 15 Zeichen)\n");
printf("Liste der Befehle:\n\n");
printf("list = Liste des Stacks anzeigen\n");
printf("push = Zeichen auf den Stack legen\n");
printf("pop = Zeichen vom Stapel nehmen\n");
printf("exit = Programm beenden\n\n");
while(eingabe){ //Eingabeschleife
printf("\nBitte geben Sie ihren Befehl ein: ");
scanf("%s", &eingabe);
printf("eingegebener Befehl: %s\n", eingabe);
if (strcmp(eingabe,"exit") == 0){ //exit
printf("\n!!Das Programm wird beendet!!\n");
exit(1);
} //ende exit
else if (strcmp(eingabe,"push") == 0){ //push
scanf("%c", &z);
printf("Zeichen wird auf Stack gelegt\n");
} //ende push
else if (strcmp(eingabe,"pop") == 0){ //pop
printf("Das obertste Zeichen wird entfernt\n");
} //ende pop
else if (strcmp(eingabe,"list") == 0){ //liste ausgeben
printf("Die Liste des Stacks wird ausgegeben\n");
printf("%s\n", &stack);
} //ende list
} //Ende eingabeschleife
printf("\ntest");
printf("\n\n"); return 0; } //Ende Main
3 Antworten
das erste scanf ist falsch. du übergibst die adresse von eingabe, wobei eingabe als variable schon auf das erste element verweist, also entweder eingabe übergeben oder &eingabe[0]. Bei dem printf ganz unten machst du den selben fehler. Am Besten nochmal das Kapitel Arrays und pointer anschauen.
du übergibst die adresse von eingabe
eingabe ist ein Array; da ist der Adressoperator zwar nicht nötig, aber auch nicht falsch.
oh okay na das bringt mich doch schonmal weiter vielen dank für die hilfreiche antwort =)
benutze "fflush(stdin);" vor deinem scanf. Das leert den Tastaturpuffer.
Es hängt wahrscheinlich einfach nur deine letzte Eingabe im Puffer.
...code...
"fflush(stdin);"
scanf(...
...code...
Wie wärs mit if (...){...} else if (...){...}