**********************************
*
* 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;
}