**********************************
*
*       C/C++vaja 6
*
*       - datoteke, FILE  /1
*       
*       
****
 
 
1. Dana je datoteka 'stavki.dat', ki pri izpisu z DOS ukazom 'type stevila.dat' na zaslon
   generira nasledno vsebino "Blizajo se soncni dnevi. Nikoli ne bo bolje." . Napišite
   C-jevski program, ki bo :
        a) izvedel enako opravilo kot navedeni 'type' ukaz,
 
 
Rešitev:
 
#include <stdio.h>
#include<string.h>
int main(void)
{
   char s[100]="Blizajo se soncni dnevi. Nikoli ne bo bolje.";
   FILE *stream;
   if ((stream = fopen("stavki.dat", "wb")) == NULL)
   {
      fprintf(stderr, "Ne more odpreti datoteke\n");
      return 1;
   }
   fwrite(&s, sizeof(s), 1, stream);
   fclose(stream);
   return 0;
}
        b) izvedel izpis tako,da se bo vsak znak datoteke izpisal v lastni vrstici,
 
Rešitev:
 
#include <stdio.h>
#include<string.h>
int main(void)
{
   char s[100]="B\nl\ni\nz\na\nj\no\n\ns\ne\n\ns\no\nn\nc\nn\ni\n\nd\nn\ne\nv\ni\n.\n\nN\ni\nk\no\nl\ni\n\nn\ne\nb\no\n\nb\no\nl\nj\ne\n.\n";
   FILE *stream;
   if ((stream = fopen("stavki.dat", "wb")) == NULL)
   {
      fprintf(stderr, "Ne more odpreti datoteke\n");
      return 1;
   }
   fwrite(&s, sizeof(s), 1, stream);
   fclose(stream);
   return 0;
}
        c) odstranil iz datoteke vse znake za prvim znakom '.' .
 
Rešitev:
Nevem
 
 
2. Napišite program, ki bo preveril, če v tekočem imeniku obstaja datoteka z imenom 'moja.dat'.
   Če datoteka ne obstaja, naj naredi novo datoteko s tem imenom in vanjo zapiše integerja 12345
   in 23232.
 
 
Rešitev:
 
#include <stdio.h>
#include <string.h>
main(void)
{
   FILE *stream;
 long int s;
 long int s1;
   s=12345;
   s1=23232;
   if ((stream = fopen("moja.dat", "wt"))==NULL)
   {
      fprintf(stderr, "Datoteka ne obstaja.\n");
      return 1;
   }
   fprintf(stream,"%d",s);
   fprintf(stream,"%d",s1);
   fclose(stream);
   return 0;
}
 
 
3. Datoteka 'rezultati.dat' vsebuje informacijo o imenu igralca in njegovem doseženem rezultatu.
   Informacija je shranjena v obliki :
        zapis { char ime_igralca[20]; unsigned rezultat; };
 
   Napišite program, ki bo vzdrževal to datoteko v skladu z zakonitostmi :
               - v datoteki je vedno le po 10 zapisov;
                - vsebovani so samo igralci z največjimi rezultati;
               - igralec se v datoteki lahko pojavi le enkrat (s svojim najboljšim rezultatom);
               - informacije o igralcih so v datoteki urejene po padajočih vrednostih
                  njihovih rezultatov.
   Program mora vsebovati vse demonstracijske mehanizme za delo:
               - dodajanje zapisa
               - brisanje zapisa
               - ažuriranje zapisa
               - urejanje vsebine

 

Rešitev:

 

#include<stdio.h>

#include<iostream.h>

#include<conio.h>

#include<string.h>

int main(void)

{

   clrscr();

   struct igralec{   //deklariran zapis

      char ime[20];

      int rezultat;

      } i1;

    int i;

   int j;

   FILE *f;

    if ((f=fopen("rezultati.dat", "at"))==NULL)

   {

      fprintf(stderr, "nemorem odpreti zeljene datoteke\n");

      return 1;

   }

 for (i=0;i<=9;i++) {

  cout<<"vnesite ime igralca: ";

  cin>>i1.ime;

  fwrite(&i1, sizeof(i1), 1, f);

  }

  for (j=0;j<=9;j++){

  cout<<"Vnesite stevilo zmag: ";

  cin>>i1.rezultat;

  fprintf(f,"%d",i1.rezultat);

   }

  fclose(f);

   return 0;

}