File: Stare vježbe/vjezbe12/76b__file_medalje.c

  1. /*
  2.   76a__file_utakmice.c
  3.   Naredba fscanf.
  4.   -----
  5.   Neka je zadana ulazna datoteka "Medalje.txt" koja sadrži popis sportaša koji su
  6.   osvojili medalje na Zimskoj Olimpijadi. U jednom retku datoteke je
  7.   zapisano ime sportaša i medalja koju je osvojio na nekom
  8.   olimpijskom natjecanju. Napišite program koji pronalazi i ispisuje
  9.   sportaša koji je osvojio najviše zlatnih medalja.
  10.  
  11.   Npr. za ulaznu datoteku
  12. Janica srebro
  13. Ivica srebro
  14. Anja bronca
  15. Janica zlato
  16. Janica zlato
  17. Mihaela zlato
  18.   program treba ispisati
  19. Najvise zlatnih medalja ima: Janica!
  20. */
  21.  
  22. #include <stdio.h>
  23.  
  24. int main ( void )
  25. {
  26. FILE *source;
  27. char src_name[80], skijasica[80], temp[80], najskijasica[80]="", medalja[10];
  28. int n=0, br, najbr=0, i, j;
  29.  
  30. printf ("Unesite ime polazne datoteke: ");
  31. scanf ("%s", src_name);
  32.  
  33. if ((source=fopen(src_name, "rt")) == NULL)
  34. {
  35. printf ("Ne mogu otvoriti datoteku %s za citanje.\n", src_name);
  36. exit(1);
  37. }
  38.  
  39. while (fscanf (source, "%s %s ", skijasica, medalja) == 2) {
  40. printf (".%s %s.\n", skijasica, medalja);
  41. ++n;
  42. }
  43. printf ("Ukupno ima %d zapisa.\n", n);
  44.  
  45. j=0;
  46. while (j<n) {
  47. rewind(source);
  48. i=0; br=0;
  49. while (fscanf (source, "%s %s ", skijasica, medalja) == 2 && i<j) {
  50. ++i;
  51. } // nasli smo i-tu skijasicu
  52. rewind(source);
  53. while (fscanf (source, "%s %s ", temp, medalja) == 2) {
  54. if ( (strcmp(skijasica, temp)==0) && (strcmp(medalja, "zlato")==0) )
  55. ++br;
  56. } // prebrojili smo zlata za i-tu skijasicu
  57. if(br > najbr) {
  58. najbr = br;
  59. strcpy(najskijasica, skijasica);
  60. }
  61. printf ("%d. skijasica %s, zlatnih medalja %d.\n", j+1, skijasica, br);
  62. ++j;
  63. }
  64. printf ("Najvise zlatnih medalja osvojila je %s. Ukupno %d zlata.\n", najskijasica, najbr);
  65. fclose (source);
  66.  
  67. return 0;
  68. }
  69.