Probelm mit printf in while schleife
-
Hallo,habe zum ausprobieren ein Programm geschrieben,
sinn sei mal dahin gestellt..ich habe jedoch folgendes Problem , wenn ich "vokale" eingebe und somit in die if-schleife komme,diese durchlaufe , wird anschließend "
Welches Programm möchten sie starten?Welches Programm möchten sie starten?"
ausgegeben , warum?#include <stdio.h> #include <stdlib.h> #include <string.h> /* * */ int main(int argc, char** argv) { char programmwahl[10]; char vokale_satz[50]; char vokale_fertig[strlen(vokale_satz)]; char buchstabe; int i = 0, j = 0; int gestartet = 0; while (gestartet == 0) { printf("Welches Programm möchten sie starten?"); gets(programmwahl); if (strcmp(programmwahl, "vokale") == 0) { j = 0; memset(vokale_fertig, 0, strlen(vokale_satz)); printf("\nDas Programm \"Vokale\" wurde gestartet\n\nTippe einen Satz ein:"); gets(vokale_satz); /*puts(vokale_satz);*/ printf("Gebe einen Buchstaben ein: "); buchstabe = getchar(); for (i = 0; i != strlen(vokale_satz); i++) { if (vokale_satz[i] != buchstabe) { vokale_fertig[j] = vokale_satz[i]; j = j + 1; } } printf("Der neue satz lautet: %s\n\n", vokale_fertig); } if (strcmp(programmwahl, "exit") == 0) { printf("\nDas Programm wird beendet"); gestartet = 1; } } return (EXIT_SUCCESS); }
-
1. www.if-schleife.de
2. Warnung: The `gets' function is dangerous and should not be used.
3. Daher auch seit ein paar Jahren: ‘gets’ is deprecated.
4. Die eigentliche Antwort auf deine Frage: gets liest immer bis zum nächsten Zeilenumbruch. Nachdem du dein Hauptprogramm durchlaufen hast, sind - je nachdem wie deine Eingabe genau erfolgte, aber ich nehme mal stillschweigend an, dass du eine Tastatur benutzt hast - eventuell noch ein paar Zeilenumbrüche im Eingabestrom. Weil nämlich das getchar genau einen Buchstaben gelesen hat, du aber wahrscheinlich den Buchstaben und dann einen Zeilenumbruch (Entertaste) eingegeben hast. Das getchar hat diesen Zeilenumbruch nicht angerührt, es war schon mit dem Buchstaben alleine zufrieden. Das gets hat dann nach dem ersten Zeilenumbruch gesucht, sofort einen gefunden und daher eine leere Zeichenkette zurück gegeben, die natürlich ungleich "vokale" ist.