Lucrul cu fisiere

Acest forum este dedicat intrebarilor de programare care nu-si au locul in unul din celelalte forumuri
Post Reply
mircea2011
Junior
Junior
Posts: 27
Joined: 11 Aug 2011, 23:12
Judet: Olt

Lucrul cu fisiere

Post by mircea2011 » 19 Apr 2012, 22:55

Va salut.
Am o problema cu fisiere binare si nu reusesc sa-i dau de cap.

Sa se scrie un program pentru crearea unui fisier binar, avand articole structuri cu urmatoarele campuri :
- nume depunator - un sir de maxim 30 de caractere.
- data depunerii - o structura avand campurile intregi : zi, luna, an.
- suma depusa - o valoare reala.
Articolele sunt grupate pe zile in ordine cronologica. Datele se introduc de la tastatura, fiecare pe trei linii. Sa se afiseze apoi continutul fisierului.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void main()
{
struct // am creat un vector de articole pentru a le sorta ulterior dupa data depunerii;
{ // voi citi ceea ce am scris in fisier intr-un vector separat de articole;
char nume[30];
struct
{
int zi, luna, an;
} data;
double suma;
}articole[20], articol, citite[20];

FILE *f;
int i, n, found; // n - numarul de articole; found - folosit la sortare;
printf("\n Introduceti numarul de articole : ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("\n Introduceti numele depunatorului : ");
scanf("%s", articole.nume);
printf("\n Introduceti data depunerii <ZZ/LL/AA> : ");
scanf("%d %d %d", &articole.data.zi, &articole.data.luna, &articole.data.an);
printf("\n Introduceti suma depusa : ");
scanf("%lf", &articole.suma);
}
do
{
found=0;
for(i=0; i<n-1; i++) // testez cazurile in care data articolului curent este "mai mare" decat data articolului urmator.
if((articole.data.an > articole[i+1].data.an) || (articole.data.an == articole[i+1].data.an && \
articole.data.luna > articole[i+1].data.luna) || (articole.data.an == articole[i+1].data.an && \
articole.data.luna == articole[i+1].data.luna && articole[i].data.zi > articole[i+1].data.zi))
{
articol = articol[i]; // eorarea primita : "valoarea subscrisa nu este nici pointer si nici tablou" :reallymad:
articol[i] = articol[i+1];
articol[i+1] = articol;
found = 1;
}
}while(found);
if((f=fopen("output.dat", "wb")) == NULL)
{
printf("\n Eroare la deschiderea fisierului!");
exit(1);
}
fwrite(&n, sizeof(int), 1, f);
fwrite(&articole, sizeof(articol), n, f);
fclose(f);
if((f=fopen("output.dat", "rb")) == NULL)
{
printf("\n Eroare la deschiderea fisierului!");
exit(1);
}
fread(&n, sizeof(int), 1, f);
fread(&citite, sizeof(articol), n, f);
for(i=0; i<n; i++)
printf("\n Articolul %d : %s, %d/%d/%d, %lf\n", i+1, citite[i].nume, citite[i].data.zi, citite[i].data.luna, \
citite[i].data.an, citite[i].suma);
fclose(f);
}



User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Lucrul cu fisiere

Post by bu7ch3r » 20 Apr 2012, 01:52

"wb+" ?
Cu stima,
Lupu Claudiu

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi

Re: Lucrul cu fisiere

Post by Ovidiu Cucu » 20 Apr 2012, 09:23

mircea2011 wrote: articol = articol;

Nu cumva ai papat o litera?

Afx
Junior
Junior
Posts: 6
Joined: 26 Feb 2012, 21:10
Judet: Bucureşti

Re: Lucrul cu fisiere

Post by Afx » 17 Aug 2012, 16:33

Salut,

Code: Select all

articol = articol[i];
Problema este ca ai scris "articol" in loc de "articole" (cu e la sfarsit). Mai sus, ai definit "articole" ca fiind vector de intergistrari, iar "articol" ca inregistrare. Compilatorul nu poate interpreta pentru variabile ce nu sunt vectori, pointeri, sau instante de clase ce nu au definite operatorul [].
Deci corect este:

Code: Select all

articol = articole[i];
articole[i] = articole[i+1];
articole[i+1] = articol;

Camron70
Junior
Junior
Posts: 1
Joined: 22 Oct 2014, 11:22
Judet: Covasna

Re: Lucrul cu fisiere

Post by Camron70 » 22 Oct 2014, 11:24

Am de realizat un formular..o aplicatie..in care trebuie sa introduc toate datele dintr-un singur formular (nume,prenume.adresa.e-mai,suma de plata etc,) iar din acest formular..aceste date sa fie exportate in campurile destinate nume prenume etc in mai multe fisiere word (contract de garantie, adeverinta de avans etc. ) :thumbsup:
Unlike scam C4090-456 vce exam questions - braindumps.com and ISEB and Swiss Federal Institute of Technology Zurich online training courses provide you quick success in first try of Youtube.

sofroneclaudiu
Junior
Junior
Posts: 1
Joined: 08 May 2015, 11:29
Judet: Bacău
Contact:

Re: Lucrul cu fisiere

Post by sofroneclaudiu » 08 May 2015, 11:33

oferte
Gasesti toate apartamente bacau vanzare
De alfei si mai multe imobiliare bacau
Si celelate oferte de vanzare garsoniere bacau

Post Reply