Licznik liter

0

Witam
Wczoraj pytałem o to jak zrobić aby program liczył litery w pobranym z pliku tekście. Program pobiera tekst z pliku i liczy litery , ale tylko w pierwszej linijce dlaczego ? Jak to poprawić aby brało pod uwagę resztę linijek?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  FILE *plik;  
  char wczytaniepliku();
  char ciag[3000];
  char tab[26];
  int i;
  for(i=0;i<26;i++) tab[i]=0;
  

   if(!(plik=fopen("tekst.txt","r")))
   
                             {
                                    printf("\nblad otwarcia pliku\n");
                                    system("pause");
                                    exit(0);
                             }

fgets(ciag,3000,plik);

  for(i=0;ciag[i]!='\0';i++) 
  {
  
          if(ciag[i]<='Z') tab[ciag[i]-'A']++;
          
             else tab[ciag[i]-'a']++;
            }
  
  for(i=0;i<26;i++) if(tab[i]!=0) 
  
  printf("litera %c lub %c wystapila %d razy\n",'a'+i,'A'+i,tab[i]);
  
  system("pause");
  return 0;
}
0

Nie przeglądałam kodu dokładnie, ale to co od razu rzuca się w oczy: czytasz tylko 1 linię z pliku, nigdzie nie masz pętli czytającz pliku, dopóki plik się nie skończy (EOF). Powinieneś zrobić jakąś pętlę while(plik_sie_nie_skonczy) i w niej czytac poj. linie i ją obrabiac. To tyle ode mnie :p

0

fgets zrób w pętli while (fgets(ciag, 3000, plik); i ciag zmień np. na linia i dodawaj linie do ciągu. Dopiero potem analizuj ciąg złożony z linijek. A łatwiej Ci będzie z fstream, ale jak chcesz. Wg mnie to powinno wyglądać tak:

char ciag[3000];
char linia[256];
while (fgets(linia, 3000, plik) strcat(ciag, linia); //strcat dołącza po prostu tablice
//i dalej sobie liczysz z ciagu litery...

I nie używaj system("pause");!!! Użyj cin.ignore(); cin.get();. I exit(0) też jest do bani, wystarczy return 1;

1 użytkowników online, w tym zalogowanych: 0, gości: 1