Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Upis strukture u fajl

[es] :: C/C++ programiranje :: C/C++ za početnike :: Upis strukture u fajl

[ Pregleda: 4563 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cobragangsta

Član broj: 146928
Poruke: 84
*.dynamic.isp.telekom.rs.



+2 Profil

icon Upis strukture u fajl07.07.2013. u 16:45 - pre 131 meseci
Ako imam strukturu:
Code:

typedef struct student{
               char name[20];
               char surname[20];
               int semester;
               int id;
    } stcvor

typedef stcvor *pokz;


trebam napisati program koji ucitava n strukturnih promenjivih i koji zapisuje u datoteku student.txt

Code:


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

main(){
int n,i, semestar, idnt;
char ime[20], prezime[20];
FILE * pokF;

int size = sizeof (struct student);

scanf("%d",&n);

for(i=1; i<=n; i++) {
   scanf("%s/n", ime);
   scanf("%s/n", prezime);
   scanf("%d/n", &semestar);
   scanf("%d/n", &idnt);

  stcvor->name=ime;
  stcvor->surname=prezime;
  stcvor->semester=semestar;
  stcovr->id=idnt;

 pokF = fopen("student.txt","wb");


   if (pokF == NULL)
   {
      fprintf(stderr, "Cannot open file for writing.\n");
   }
 
   fwrite(pokz, sizeof(pokz[0]), 1, pokF);
 
   fclose(pokF);

 }
}


kada ovo pokrenem dobijam gomilu gresaka ...
U cemu je problem

[Ovu poruku je menjao cobragangsta dana 08.07.2013. u 01:22 GMT+1]

[Ovu poruku je menjao cobragangsta dana 08.07.2013. u 02:45 GMT+1]
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Upis strukture u fajl08.07.2013. u 10:02 - pre 131 meseci
Mozes li napisati koje su greske.
Cini mi se da imas gresku u deklaraciji strukture:

Code (c):


typedef struct student{
               char name[20];
               char surname[20];
               int semester;
               int id;
    } stcvor; // ovde ti nedostaje ';'

 

EOF
 
Odgovor na temu

cobragangsta

Član broj: 146928
Poruke: 84
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Upis strukture u fajl10.07.2013. u 23:49 - pre 131 meseci
ima brdo upozorenja. ne vredi pisati.
aj ovako:

Code:

  stcvor->name="petar";
  stcvor->surname="peric";
  stcvor->semester=1;
  stcovr->id=12345;

  pokF = fopen("student.txt","wb");

   fwrite(pokz, sizeof(pokz[0]), 1, pokF);
 
   fclose(pokF);


nece da mi upise strukturu u (postojeci) fajl
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Upis strukture u fajl11.07.2013. u 10:14 - pre 131 meseci
Braco gangsteru, ako me nešto stvarno nervira, to su postovi nadobudnih kvazi hakera koji isijavaju u svakoj liniji nepoznavanjem programiranja. Ne moraš da se žališ na ton mog odgovora, ja nisam mnogo fin tip i to znam. Malo mi je falilo da ne odgovorim, al ajde, možda će ovo nekom i koristiti.

Da sam na tvom mestu, ne bih više koristio tako glup nick (bolje bi ti stajao braco_noob ili nešto slično), ako ne želiš da tvoja pitanja budu ignorisana od strane ljudi koji znaju da programiraju.

Prvo
Code (c):

typedef struct student{
               char name[20];
               char surname[20];
               int semester;
               int id;
    } stcvor;

typedef stcvor *pokz;
 

deklariše tip student, alias na tip student pod nazivom stcvor i tip pokz koji je pokazivač na tip student. Ovo sve si prepisao bez razumevanja suštine iz jednog drugog zadataka koji si postovao na ovom forumu. Nigde nema deklaracije varijable tipa struct student.

Drugo
Code (c):

  stcvor->name="petar";
  stcvor->surname="peric";
  stcvor->semester=1;
  stcovr->id=12345;
 

je sintaksno neispravno. Ne možeš dodljivati ALIASU na tip vrednosti nego PROMENLJIVOJ, a ti nigde nemaš promenljivu tupa student u kodu.

Treće
U petlji n puta otvaraš i zatvaraš isti fajl. Čak i kada bi program radio, rezultat bi bio fajl u koji je upisan samo POSLEDNJI slog, jer svaki put kada otvoriš fajl u modu za pisanje ("wb") ti pišeš od početka fajla.

Četvrto
Citat:
ima brdo upozorenja. ne vredi pisati.

To što tebi ništa ne znači upozorenje kompajlera, ne znači da pravi programeri neće razumeti šta ti kompajler poručuje. Zato, ako kompajler javi grešku, napiši TAČNO šta ti kompajler kaže, jer će to pomoći onima koji bi, eventualno, hteli tebi da pomognu.

Code (c):

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

typedef struct student{
     char name[20];
     char surname[20];
     int semester;
     int id;
} strec;

strec st;

main(){
     int n,i;
     FILE * pokF;

     int size = sizeof (struct student);

     scanf("%d",&n);

     pokF = fopen("student.txt","wb");
     if (pokF == NULL)
     {
          fprintf(stderr, "Cannot open file for writing.\n");
     }

     for(i=1; i<=n; i++) {
          scanf("%s/n", st.name);
          scanf("%s/n", st.surname);
          scanf("%d/n", &st.semester);
          scanf("%d/n", &st.id);

          fwrite(&st, size, 1, pokF);
     }
     fclose(pokF);
}
 

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Upis strukture u fajl11.07.2013. u 10:49 - pre 131 meseci
Sve si super rekao, osim prva dva pasusa. Molio bih manje bockanja na ličnoj osnovi. Svakom se nekad isključi mozak pa ne zna ni koji je dan, a kamo li greške u kodu i nerazumevanje poruka kompajlera.

Držite se programiranja.
 
Odgovor na temu

cobragangsta

Član broj: 146928
Poruke: 84
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Upis strukture u fajl11.07.2013. u 17:34 - pre 131 meseci
Citat:
djoka_l: Braco gangsteru, ako me nešto stvarno nervira, to su postovi nadobudnih kvazi hakera koji isijavaju u svakoj liniji nepoznavanjem programiranja. Ne moraš da se žališ na ton mog odgovora, ja nisam mnogo fin tip i to znam. Malo mi je falilo da ne odgovorim, al ajde, možda će ovo nekom i koristiti.

Da sam na tvom mestu, ne bih više koristio tako glup nick (bolje bi ti stajao braco_noob ili nešto slično), ako ne želiš da tvoja pitanja budu ignorisana od strane ljudi koji znaju da programiraju.



Generalno si u pravu. Nik jeste idiotski. Imao sam ranije drugi ali sam zaboravio koji. Napravio sam drugi profil, hteo po svom nadimku, kad gle cobra (Stallone)zauzeto kao i nekoliko sufiksa koja sam dodavao. Na radiju je isao nek rep, dal' Snoop, Coolio il' sl. pa mi kroz glavu prolete ovaj sufiks. Bilo mi je smesno i bio je slobodan. I gle, zapamtio sam ga! Nemam veze s kriminalom, nit' se lozim time. Volim da cackam racunare i zelim da naucim da programiram u C-u.
Jedino ne razumem ono za "nadobudnog hakera", al nije ni vazno. Interesuje me samo kako da upisem strukturu u fajl o cemu cu nastavaiti u sledecoj poruci.
Nadam se da je sad jasnije, pa dok ne smislim drugi nik.....
 
Odgovor na temu

cobragangsta

Član broj: 146928
Poruke: 84
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Upis strukture u fajl11.07.2013. u 18:02 - pre 131 meseci
Malo sam preuredio kod

Code:

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

typedef struct student{
               char name[20];
               char surname[20];
               int semester;
               int id;
    } stcvorx;  // dodato x za razliku od predhodnog koda


main(){
int n,i, semestar, idnt;
char ime[20], prezime[20];
stcvorx stcvor, *pokz;
FILE * pokF;

int size = sizeof (struct student);

scanf("%d",&n);

  pokF = fopen("student.txt","wb");
   if (pokF == NULL)
   {
      fprintf(stderr, "Cannot open file for writing.\n");
   }

  for(i=1; i<=n; i++) {
    scanf("%s/n", ime);
    scanf("%s/n", prezime);
    scanf("%d/n", &semestar);
    scanf("%d/n", &idnt);

    strcpy(stcvor->name, ime);
    strcpy(stcvor->surname, prezime);
    stcvor->semester=semestar;
    stcovr->id=idnt;

   fwrite(pokz, sizeof(pokz[0]), 1, pokF);
 }
  fclose(pokF);
}


bitno mi je kako da upisem strukturu u fajl, ostalo mi je nebino (moracu kasnije da to izvezbam do detalja)
Tj ovaj deo:
Code:

    strcpy(stcvor->name, ime);
    strcpy(stcvor->surname, prezime);
  stcvor->semester=1;
  stcovr->id=12345;

  pokF = fopen("student.txt","w");

   fwrite(pokz, sizeof(pokz[0]), 1, pokF);
 
   fclose(pokF);


Nasao sam neke primere kako se upisuju znaci i stringovi u fajl ali ne i celokupna struktura. Npr

Code:

    uFile=fopen(student.txt,"w");
    while((c=getc())!=EOF)
         putc(c,uFile);

    fclose(uFile);

Ili sa fprintf
Ali ne mogu da uklopim sa strukturom
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Upis strukture u fajl23.07.2013. u 13:19 - pre 130 meseci
Prvo, stcvor je obicna promenljiva a ne pokazivac, tako da moras da ispravis ovo:

strcpy(stcvor->name, ime);
strcpy(stcvor->surname, prezime);
stcvor->semester=semestar;
stcovr->id=idnt;

u ovo:

strcpy(stcvor.name, ime);
strcpy(stcvor.surname, prezime);
stcvor.semester=semestar;
stcovr.id=idnt;

Da nemas varijabilne podatke u strukturi (kao sto su ovi nizovi karaktera) mogao bi da upises strukturu u fajl na sledeci nacin:

fwrite((const void*)&stcvor, sizeof(student), 1, pokF);

Posto je kod tebe slucaj da su ova dva niza karaktera varijabilni (name i surname) onda moras da upisujes podatak po podatak i pre upisa stringa u fajl da upises prvo duzinu stringa.
Tako da mozes da napravis funkciju:

Code:

void sacuvajStudenta(Student student, FILE* pFile)
{
      int nameLength = strlen(student.name);
      int surnameLength = strlen(student.surname);
      fwrite(&nameLength, sizeof(int), 1, pFile);
      fwrite(student.name, sizeof(char), nameLength, pFile);
      .... // itd za ostale podatke



i posle pozoves u main-u:

....
sacuvajStudenta(stcovr, pokF);
.....

EOF
 
Odgovor na temu

cobragangsta

Član broj: 146928
Poruke: 84
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Upis strukture u fajl30.07.2013. u 19:44 - pre 130 meseci
To je to.
Hvala puno!!
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Upis strukture u fajl

[ Pregleda: 4563 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.