File: Stare vježbe/vjezbe13/77__datoteka_broj_znakova.c

  1. /*
  2.   77__datoteka_broj_znakova.c
  3.   -----
  4.   Program ucitava ime datoteke, te za danu datoteku ispisuje koliko se
  5.   ukupno u njoj nalazi znakova, rijeci i linija.
  6.   Program zavrsava s radom kada korisnik unese "0".
  7. */
  8.  
  9. #include <stdio.h>
  10. #include <string.h>
  11.  
  12. #define UNUTAR_RIJECI 1
  13. #define IZVAN_RIJECI 0
  14.  
  15. void broji(FILE* fp, int* znakova, int* rijeci, int* linija) {
  16. char ch;
  17. int status=IZVAN_RIJECI;
  18.  
  19. while ((ch=getc(fp)) != EOF)
  20. {
  21. (*znakova)++;
  22. if (ch == '\n')
  23. (*linija)++;
  24. if (ch == ' ' || ch == '\n' || ch == '\t')
  25. status = IZVAN_RIJECI;
  26. else
  27. if (status == IZVAN_RIJECI)
  28. {
  29. status = UNUTAR_RIJECI;
  30. (*rijeci)++;
  31. }
  32. }
  33. }
  34.  
  35. int main() {
  36. int znakova, rijeci, linija, status;
  37. char ime_datoteke[256];
  38. FILE* fp;
  39.  
  40. do {
  41. printf("Unesi ime datoteke: ");
  42. scanf("%s", ime_datoteke);
  43. if(status=strcmp(ime_datoteke, "0")) {
  44. if((fp=fopen(ime_datoteke, "r")) == NULL) {
  45. printf("Ne mogu otvoriti datoteku %s.\n", ime_datoteke);
  46. continue;
  47. }
  48. znakova=rijeci=linija=0;
  49. broji(fp, &znakova, &rijeci, &linija);
  50. printf("Broj znakova: %d, broj rijeci: %d, broj linija: %d\n\n",
  51. znakova, rijeci, linija);
  52. fclose(fp);
  53. }
  54. }
  55. while(status);
  56.  
  57. return 0;
  58. }
  59.