Hilfe für Pointerübergabe?!



  • Hallo, ich muss Buchstaben und Ziffern (alle Zeichen) einer Datei auszählen - mit pointern über diese vorgeschriebene Funktion:
    void zählen (int* grosse, int* kleine, int* ziffern, int* restliche, char c)

    Mein Code sieht so aus, er zählt aber nich hoch - Könnt Ihr mir bitte helfen (morgen Klausur um 16.00Uhr)

    #include <stdio.h>
    
    void zaehlen(int* grosse, int* kleine, int* ziffern, int* restliche, char c);
    
    int main(void){
    
    	int zGross = 0;
    	int zKlein = 0;
    	int zZiffer = 0;
    	int zRest = 0;
    	char ch;
    	FILE* datei_ptr;
    
    	datei_ptr = fopen("Datei.txt","r");
    	printf("Inhalt der Datei Datei.txt:\n\n");
    
       while (!feof(datei_ptr)){
    			ch =fgetc(datei_ptr);
    			putchar(ch);
    			zaehlen (&zGross, &zKlein, &zZiffer, &zRest, ch);
    			}
    			fclose(datei_ptr);
    
       printf("\n\nAuszählung:\n");
    	printf("\n\nGrossbuchstaben: %i",zGross);
    	printf("\nKleinbuchstaben: %i",zKlein);
    	printf("\nZiffern: %i",zZiffer);
    	printf("\nRestliche Zeichen: %i",zRest);
    	printf("\n\nSumme aller Zeichen: %i",zGross+zKlein+zZiffer+zRest);
    	return 0;
    }
    
    void zaehlen(int* grosse, int* kleine, int* ziffern, int* restliche, char c){
    
    				if((c >= 65) && (c<=90))grosse++;
    				else if ((c >= 97) && (c <= 122))kleine++;
    				else if ((c >= 48) && (c <= 57))ziffern++;
    				else if ((c >= 0) && (c <=47)) restliche++;
    				else if ((c >= 58) && (c <=64)) restliche++;
    				else if ((c >= 91) && (c <=96)) restliche++;
    				else if ((c >= 123) && (c <=127)) restliche++;
    
     }
    


  • (*grosse)++; usw. die klammern sind wichtig, weil post-increment staerker bindet als indirection.
    du kannst auch ++*grosse; schreiben

    weisst du, was falsch war?

    edit: gruss an den lehrer. dein c ist sauber, wenn auch die formatierung des codes etwas wuest ist 🙂

    wird in der klausur auf die fehlerbehandlung des fopen() calls wert gelegt?
    du koenntest ausserdem noch auf ferror(datei_ptr) pruefen...

    als alternative zu printf("...\n"); gibt es puts("...");. es hat keinen formatstring (also man kann nur einen string ausgeben) und es erledigt den zeilenumbruch selber.



  • Vielen Dank!!! 😃



  • Hab ganz vergessen, deine Fragen noch zu beantworten.

    weisst du, was falsch war? -> jetzt ja 🙂

    wird in der klausur auf die fehlerbehandlung des fopen() calls wert gelegt?
    -> ich denke das bekomme ich hin

    als alternative zu printf("...\n"); gibt es puts("...");. es hat keinen formatstring (also man kann nur einen string ausgeben) und es erledigt den zeilenumbruch selber -> Klasse Tipp!

    Nochmals vielen Dank.


Anmelden zum Antworten