Abbruch nach getchar()
-
Hallo Leute, bin quasi nen Anfänger und hab nen kleines Problem. Habe ne Funktion bzw. nen Code geschrieben, wo ein Zeichen in einem String durch ein anderes Zeichen ersetzt werden soll. Wenn ich den String, das zu ersetzende Zeichen und das neue Zeichen festlege funktioniert alles. Allerdings wenn ich mit gets( text ), getchar( altes Zeichen ), getchar( neues Zeichen ) den Code laufen lasse, dann bricht das Programm nach dem zweiten getchar ab! Danke schon mal im Voraus!
Hier ist mein Code:
#include <stdio.h> #include <string.h> int main( void ) { setvbuf(stdout, NULL, _IONBF, 0); void ersetze_zeichen(char *s,char alt,char neu) { while (*s) { if (*s==alt) *s=neu; s++; } } char text[101],alt,neu; printf("Bitte geben Sie den Text ein : "); gets(text); printf("Welches Zeichen in diesem Text soll ersetzt werden : "); alt=getchar(); printf("Durch welches Zeichen soll ersetzt werden : "); neu=getchar(); ersetze_zeichen(text,alt,neu); printf("\n%s",text); return 0; }
-
Was meinst du mit "bricht ab"? Gibt es eine Fehlermeldung - oder läuft das Programm einfach durch und die Konsole schließt sich hinterher?
(mein Verdacht: getchar() holt genau ein Zeichen aus dem Eingabepuffer, du hast aber noch zwei Zeichen stehen (dein zu ersetzendes Zeichen und ein '\n') - da hat der zweite getchar() etwas, was er verarbeiten kann.)
-
Auch wenn es bei dir funktioniert, werden in C Funktionen außerhalb von anderen Funktionen (auch main) definiert.
Mach mal (die Stellen findest du schon)
printf("Sie haben %c (%d) eingegeben\n", alt, alt); ... printf("Sie haben %c (%d) eingegeben\n", neu, neu);
-
Sry, hab mich nicht genau ausgedrückt. Mit Abbruch meine ich, dass das zweite getchar nicht auf eine eingabe wartet und komplett durchläuft und somit das alte Zeichen durch ein leerzeichen ersetzt wird.
-
Sicher, daß es ein Leerzeichen ist - ich hätte eher auf einen Zeilenwechsel getippt (Erklärung siehe oben).
-
Alter Anfänger- und Fachbuchautorenfehler: Eingabepuffer wird nicht geleert und schlägt negativ später auf:
-
Welcher Wert steht denn zwischen den Klammern bei der Kontrollausgabe?
-
dein zu ersetzendes Zeichen und ein '\n'
wo kommt denn das '\n' her?
-
davon daß du die Eingabe deines zu ersetzenden Buchstaben mit einem Druck auf ENTER abgeschlossen hast
-
ahh ok, danke leute für eure Antworten!!!
while(getchar()!='\n');
Kann man auch mittels fflush oder so den Puffer leeren und dann den zweiten getchar ausführen lassen?
-
abg1984 schrieb:
Kann man auch mittels fflush oder so den Puffer leeren und dann den zweiten getchar ausführen lassen?
http://www.c-plusplus.net/forum/39349
Alles andere in dieser Richtung ist leider auch pöse. Auch wenn es auf Windows üblicherweise läuft.
-
fflush ist nur für die Ausgabe gedacht.
Siehe auch http://www.c-plusplus.net/forum/viewtopic.php?t=39349