Bestimmte Zahlen aus Textdatei filtern
-
Hallo,
ich möchte fürs erste gern alle "A" und "a" aus einer Textdatei zählen, hab bis jetzt folgendes verfasst:#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char pfad[50]; char zeile[81]; int count; int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; FILE *datei; void main() { printf("\n Buchstaben-zaehl-Programm"); printf("\n\n Geben sie Pfad und Dateinamen der auszulesenden *.txt-Datei an:\n "); gets(pfad); datei = fopen(pfad, "r"); if (datei == NULL) { printf(" Datei fehlerhaft, oder nicht vorhanden!"); getch(); exit(0); } while(!feof(datei)) { fgets(zeile, 81, datei); for (int count = 0; count < 81; count++) if (zeile[count] == 'a' || zeile[count] == 'A') a++; } fclose(datei); printf(" %i mal a oder A", a); getch(); }
Aber irgendwie findet dieses Programm zu viele A's. Hat jemand einen Tipp?
Danke, MfG,
Anfänger01
-
Fehlerursache: Es kann sein, dass du bei einem Schleifendurchlauf weniger als 81 Zeichen einliest. Die Zeichen vom letzten Durchlauf stehen jedoch noch in zeile drinnen. Da du unabhängig von der wirklich gelesenen Anzahl an Zeichen immer über das volle Array iterierst, zählst du praktisch die 'a' und 'A's der des letzten Durchlaufs mit.
Primitivlösung:
Lösche vor jedem Schleifendurchlauf das Array, z.B. so:while(!feof(datei)) { memset(zeile, 0, 81); // Leert das komplette Array fgets(zeile, 81, datei); for (int count = 0; count < 81; count++) if (zeile[count] == 'a' || zeile[count] == 'A') a++; }