fgets liest alles was es kriegen kann ^^



  • hallo forum,
    fgets soll ja nur soviel zeichen lesen wie das zweite argument angibt, ich hab folgenden code geschrieben um mir das mal anzuschauen

    #include<stdio.h>
    #define MAXLAENG 10
    
    int main(void){
    	char puffer[MAXLAENG];
    	printf("\nzeile eingeben, ende mit eingabetaste...\n");
    	while(1){
    		fgets(puffer,MAXLAENG,stdin);
    		if (puffer[0] == '\n')
    			break;
    		printf("%s",puffer);
    	}
    	return 0;
    }
    

    und was is, es liest natürlich mehr als 10 zeichen ein. woran liegt es, was mache ich falsch?

    mfg...



  • Es liest maximal MAXLAENG-1 Zeichen ein. Ich glaube eher, du interpretierst das Verhalten deines Programms falsch ... wenn man dort mehr als 9 Zeichen eingibt, sieht es nämlich leicht so aus, als wären auch mehr als 9 eingelesen worden. Dabei ist die Schleife aber schon mehrmals durchgelaufen. Die Illusion kommt dadurch, dass stdout (und damit printf) gepuffert sind ... schreib mal fflush(stdout); hinter printf und probier das nochmal.



  • oder ich mache aus printf("$s"); ein printf("%s\n");
    dann seh ich auch das die schleife mehrmals durchlaufen wird.

    jetzt leuchtet es mir ein... eigentlich wie immer, absolute kleinigkeiten an denen man hängen bleibt 😞



  • Ich denke das wäre eine sehr gute Idee: 😃

    necromant schrieb:

    oder ich mache aus printf("$s"); ein printf("%s\n");


Anmelden zum Antworten