unerklärlicher Zeilensprung
-
Ich hab jetzt nen neues Problem:
Und zwar wird bei folgendem Programm aus unerklärlichen Gründen anscheinend eine Zeile übersprungen.#include <stdio.h> #define max 80 void ersetze_zeichen(char *s, char alt, char neu){ while(*s){ if(*s==alt) *s=neu; s++; } } main(){ char s[max]; char altz,neuz; printf("Geben sie einen Satz ein"); gets(s); printf("Welches Zeichen soll ersetzt werden?\n"); scanf("%c",&altz); printf("Welches Zeichen soll dafuer gesetzt werden?\n"); getchar(); /*Dies musste ich kommischerweise machen, damit die folgende Zeile nicht übersprungen wird*/ scanf("%c",&neuz);/*Diese Zeile scheint übersprungen zu werden*/ ersetze_zeichen(s,altz,neuz); printf("%s",s); getch(); }
Vielleicht könntet ihr mir sagen warum.
Vielen Dank
-
Du hast 2 abfragen.
Sobald du die eine eingabe mit einem enter abschließt wird der wert an die variable übergeben und die enter-taste(\n) bleibt noch im eingabe puffer gespeichert.Bei der nächsten abfrage wird somit das enter(\n) übergeben und die eingabe funktion scanf sofort beendet.
Mit
fflush(stdin);
kannst du den eingabe puffer leeren.
gruß hohesC
-
aber bei getchar() drück ich doch wieder nen Enter, also müßte doch wieder nen Enter im Puffer sein?
-
Nein, da gibst du das enter direkt dem getchar().
(das Problem mit dem eingabepuffer haben viele)Aber es ist richtig das man mit
fflush(stdin);
den eingabepuffer leert! Um andere fehler zu vermeiden.
mfg hohesC
-
Da es zu undefiniertem verhalten führen kann wenn man fflush(stdin);(siehe FAQ) verwendet!
schreib deinen Code eben etwas um:#include <stdio.h> #include <conio.h> #define max 80 void ersetze_zeichen(char *s, char alt, char neu){ while(*s){ if(*s==alt) *s=neu; s++; } } main(){ char s[max]; char altz,neuz; printf("Geben sie einen Satz ein"); fgets(s,max,stdin); printf("Welches Zeichen soll ersetzt werden?\n"); altz=getchar(); printf("Welches Zeichen soll dafuer gesetzt werden?\n"); getchar(); neuz=getchar(); ersetze_zeichen(s,altz,neuz); fputs(s,stdout); getch(); }
mfg hohesC