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; schreibenweisst 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 hinals 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.