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


Anmelden zum Antworten