Lucrul cu fisiere

Acest forum este dedicat intrebarilor de programare care nu-si au locul in unul din celelalte forumuri

Lucrul cu fisiere

Mesajde 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[i].nume);
printf("\n Introduceti data depunerii <ZZ/LL/AA> : ");
scanf("%d %d %d", &articole[i].data.zi, &articole[i].data.luna, &articole[i].data.an);
printf("\n Introduceti suma depusa : ");
scanf("%lf", &articole[i].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[i].data.an > articole[i+1].data.an) || (articole[i].data.an == articole[i+1].data.an && \
articole[i].data.luna > articole[i+1].data.luna) || (articole[i].data.an == articole[i+1].data.an && \
articole[i].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);
}
mircea2011
Junior
Junior
 
Mesaje: 27
Membru din: 11 Aug 2011, 23:12
Judet: Olt

Re: Lucrul cu fisiere

Mesajde bu7ch3r » 20 Apr 2012, 01:52

"wb+" ?
Cu stima,
Lupu Claudiu
Avatar utilizator
bu7ch3r
Membru++
Membru++
 
Mesaje: 326
Membru din: 17 Mai 2011, 15:17
Localitate: Sofia
Judet: Iaşi

Re: Lucrul cu fisiere

Mesajde Ovidiu Cucu » 20 Apr 2012, 09:23

mircea2011 scrie:articol = articol[i];

Nu cumva ai papat o litera?
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 3776
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi
Judet: Iaşi

Re: Lucrul cu fisiere

Mesajde Afx » 17 Aug 2012, 16:33

Salut,
Cod: Selectaţi tot
articol = articol[i];

Problema este ca ai scris "articol[i]" in loc de "articole[i]" (cu e la sfarsit). Mai sus, ai definit "articole" ca fiind vector de intergistrari, iar "articol" ca inregistrare. Compilatorul nu poate interpreta [i] pentru variabile ce nu sunt vectori, pointeri, sau instante de clase ce nu au definite operatorul [].
Deci corect este:
Cod: Selectaţi tot
articol = articole[i];
articole[i] = articole[i+1];
articole[i+1] = articol;
Afx
Junior
Junior
 
Mesaje: 6
Membru din: 26 Feb 2012, 21:10
Judet: Bucureşti

Re: Lucrul cu fisiere

Mesajde 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.
Camron70
Junior
Junior
 
Mesaje: 1
Membru din: 22 Oct 2014, 11:22
Judet: Covasna

Re: Lucrul cu fisiere

Mesajde sofroneclaudiu » 08 Mai 2015, 11:33

oferte
Gasesti toate apartamente bacau vanzare
De alfei si mai multe imobiliare bacau
Si celelate oferte de vanzare garsoniere bacau
sofroneclaudiu
Junior
Junior
 
Mesaje: 1
Membru din: 08 Mai 2015, 11:29
Judet: Bacău


Înapoi la Programare generala

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 2 vizitatori

cron