File: Stare vježbe/vjezbe04/28__broj_znakova.c

  1. /*
  2.   28__broj_znakova.c
  3.   -----
  4.   Program ucitava sa tipkovnice znak po znak, sve dok se ne ucita
  5.   znak za kraj file-a (EOF).
  6.   Pri tome broji koliko je ukupno znakova, rijeci i linija ucitano.
  7. */
  8.  
  9.  
  10. #include <stdio.h>
  11.  
  12. #define UNUTAR_RIJECI 1
  13. #define IZVAN_RIJECI 0
  14.  
  15. int main ()
  16. {
  17. char ch;
  18. int i, status;
  19. int broj_linija, broj_rijeci, broj_znakova, broj_znamenki[10]={0};
  20.  
  21. /* varijabla status nam govori da li se trenutno nalazimo unutar
  22.   neke rijeci ili ne */
  23. status=IZVAN_RIJECI;
  24. broj_linija=broj_rijeci=broj_znakova=0;
  25.  
  26. /* ucitavamo znakove sve do ne naidjemo na znak za kraj file-a */
  27. /* (EOF, tj. Ctrl+D pod UNIX-om, Ctrl+Z pod DOS-om) */
  28. /* ch=getchar() --> ucitava 1 znak sa tipkovnice */
  29. /* (ekviv. sa scanf ("%c", &ch)) */
  30. /* putchar (ch) --> ispisuje znak ch na ekran */
  31. /* (ekviv. sa printf ("%c", ch)) */
  32.  
  33. while ((ch=getchar()) != EOF)
  34. {
  35. broj_znakova++;
  36. if (ch >= '0' && ch <= '9') broj_znamenki[ch-'0']++;
  37. if (ch == '\n') broj_linija++;
  38.  
  39. if (ch == ' ' || ch == '\n' || ch == '\t')
  40. status = IZVAN_RIJECI;
  41. else
  42. if (status == IZVAN_RIJECI)
  43. {
  44. status = UNUTAR_RIJECI;
  45. broj_rijeci++;
  46. }
  47. }
  48.  
  49. printf ("\nBroj pojavljivanja pojedinih znamenki:\n");
  50. for (i=0; i<10; ++i) printf ("%d[%d] ", broj_znamenki[i], i);
  51.  
  52. printf("\n\nBroj linija: %d, broj rijeci: %d, broj znakova: %d\n",
  53. broj_linija, broj_rijeci, broj_znakova);
  54.  
  55. return 0;
  56. }
  57.