|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
11.12.2012, 21:01 | #1 |
Član
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
|
Seminarski iz C-a
Dakle, kao sto u naslovu pise, radim seminarski iz C-a. Zadatak je da napravim adresar sa imenima, prezimenima, brojevima telefona, itd, itd... Imam problem sa otvaranjem datoteka, uvek mi izbacuje gresku... Iskoristio sam svoj stariji kod za azuriranje, samo sto su bili u pitanju studenti, tj imena, prezimena, indeksi, bodovi i ocene... Tada mi je sve radilo, medjutim kada sam izmenio za potrebe seminarskog odjednom mi izbacuje greske... Sto posto je neka debilna greska koju trenutno ne vidim...
Kod:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX 256 typedef enum{GRESKA1_DAT,GRESKA2_DAT,GRESKA_POZ} Greska; char *poruke_o_greskama[]={ "\nGreska pri otvaranju datoteke za upis!\n", "\nGreska pri otvaranju datoteke za prikaz!\n", "\nGreska pri pozicioniranju u datoteci", }; FILE *fptr; typedef struct adresar{ char ime[MAX+1],prezime[MAX+1],br_telefona[MAX+1],mail_adresa[MAX+1]; }Adresar; Adresar a1; void unos(void); void izmene(void); void prikaz(void); void greska(Greska status); void izmena_br_telefona(void); void izmena_mail_adrese(void); void obrisi_podatke(void); int main () { int opcija,izlaz=0; do { printf ("\n\n1.Unos\n2.Izmena\n3.Prikaz\n4.Izlaz\n5.Obrisi podatke"); printf ("\nIzabrati opciju\n"); scanf ("%d",&opcija); switch(opcija) { case 1: unos(); break; case 2: izmene(); break; case 3: prikaz(); break; case 5: obrisi_podatke(); break; default: izlaz=1; break; } }while(!izlaz); return 0; } void unos(void) { Adresar x; int ima=0,ima1=0; if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); printf ("\nUnesite podatke\n"); printf ("\nUnesite ime: \n"); fflush(stdin); scanf (" %s",a1.ime); printf ("\nUnesite prezime: \n"); fflush(stdin); scanf (" %s",a1.prezime); printf ("\nUnesite broj telefona: \n"); fflush(stdin); scanf (" %s",a1.br_telefona); printf ("\nUnesite mail adresu: \n"); fflush(stdin); scanf (" %s",a1.mail_adresa); while(fread(&x,sizeof(Adresar),1,fptr)!=0) { if (strcmp(x.br_telefona,a1.br_telefona)==0) { printf ("\nUneti broj telefona vec postoji!\n"); ima=1; break; } if (strcmp(x.mail_adresa,a1.mail_adresa)==0) { printf ("\nUneta mail adresa vec postoji!\n"); ima=1; } } if(ima==0) { fwrite(&a1,sizeof(Adresar),1,fptr); } if (ima1==0) { fwrite(&a1,sizeof(Adresar),1,fptr); } fclose(fptr); } void prikaz(void) { int i=1; if((fptr=fopen("adresar.bin","rb"))==NULL) greska(GRESKA2_DAT); while((fread(&a1,sizeof(Adresar),1,fptr))!=0) { printf ("\n%d. Ime :\t%s\n Prezime :\t%s\n Broj telefona:\t%s\n Mail adresa:\t\tSd\n ",i++,a1.ime,a1.prezime,a1.br_telefona,a1.mail_adresa); } fclose(fptr); } void greska(Greska status) { fprintf(stderr,poruke_o_greskama[status]); exit(1); } void izmene(void) { int opcija; printf ("\n1.Izmeni broj telefona? \n"); scanf ("%d",&opcija); switch(opcija) { case 1: izmena_br_telefona(); break; default: break; } } void obrisi_podatke(void) { char x,y; printf ("\nJeste li sigurni? D/N?\n"); fflush(stdin); x=getchar(); if (x=='D'||x=='d') {if((fptr=fopen("adresar.bin","wb"))==NULL) greska(GRESKA2_DAT); fclose(fptr); printf ("\nObrisali ste sve podatke\n");} } void izmena_br_telefona(void) { char index[MAX]; int i,j; Adresar s; if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); printf ("\nZa izmenu broja telefona unesite broj telefona koji hocete da izmenite: \n"); fflush(stdin); gets(index); while (1) { if(fread(&s,sizeof(Adresar),1,fptr)==0) break; if (strcmp(s.br_telefona,index)==0) { printf ("\nUnesite broj telefona: \n"); scanf ("%d",&s.br_telefona); fseek(fptr,-sizeof(Adresar),SEEK_CUR); fwrite(&s,sizeof(Adresar),1,fptr); break; } } fclose(fptr); } |
11.12.2012, 21:11 | #2 |
Starosedelac
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
|
Re: Seminarski iz C-a
A da rucno kreiras ovu datoterku adresar.bin, ja sam je rucno kreirao i radi. Sad ne znam da li tako smo po uslovu zadatka? Nisam detaljno gledao kod.
|
11.12.2012, 21:12 | #3 |
Član
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
|
Re: Seminarski iz C-a
|
11.12.2012, 21:23 | #4 |
Starosedelac
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
|
Re: Seminarski iz C-a
Za pocetak ovo ti je visak, tj treba da se prepravi.
Kod:
if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); |
11.12.2012, 21:48 | #5 | |
Član
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
|
Re: Seminarski iz C-a
Citat:
Malo sam izmenio kod, sada mi sve radi do kraja, osim toga sto program nece da kreira datoteku, morao sam sam da je kreiram. Kod:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX 256 typedef enum{GRESKA1_DAT,GRESKA2_DAT,GRESKA_POZ} Greska; char *poruke_o_greskama[]={ "\nGreska pri otvaranju datoteke za upis!\n", "\nGreska pri otvaranju datoteke za prikaz!\n", "\nGreska pri pozicioniranju u datoteci", }; FILE *fptr; typedef struct adresar{ char ime[MAX+1],prezime[MAX+1],br_telefona[MAX+1],mail_adresa[MAX+1]; }Adresar; Adresar a1; void unos(void); void izmene(void); void prikaz(void); void greska(Greska status); void izmena_br_telefona(void); void izmena_mail_adrese(void); void obrisi_podatke(void); int main () { int opcija,izlaz=0; do { printf ("\n\n1.Unos\n2.Izmena\n3.Prikaz\n4.Izlaz\n5.Obrisi podatke"); printf ("\nIzabrati opciju\n"); scanf ("%d",&opcija); switch(opcija) { case 1: unos(); break; case 2: izmene(); break; case 3: prikaz(); break; case 5: obrisi_podatke(); break; default: izlaz=1; break; } }while(!izlaz); return 0; } void unos(void) { Adresar x; int ima=0,ima1=0; if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); printf ("\nUnesite podatke\n"); printf ("\nUnesite ime: \n"); fflush(stdin); gets(a1.ime); printf ("\nUnesite prezime: \n"); fflush(stdin); gets(a1.prezime); printf ("\nUnesite broj telefona: \n"); fflush(stdin); gets(a1.br_telefona); printf ("\nUnesite mail adresu: \n"); fflush(stdin); gets(a1.mail_adresa); while(fread(&x,sizeof(Adresar),1,fptr)!=0) { if (strcmp(x.br_telefona,a1.br_telefona)==0) { printf ("\nUneti broj telefona vec postoji!\n"); ima=1; break; } } if(ima==0) { fwrite(&a1,sizeof(Adresar),1,fptr); } fclose(fptr); fptr=fopen("adresar.bin","rb+"); while(fread(&x,sizeof(Adresar),1,fptr)!=0) { if (strcmp(x.mail_adresa,a1.mail_adresa)==0) printf ("\nUneta mail adresa vec postoji!\n"); ima1=1; break; } if(ima1==0) { fwrite(&a1,sizeof(Adresar),1,fptr); } fclose(fptr); } void prikaz(void) { int i=1; if((fptr=fopen("adresar.bin","rb"))==NULL) greska(GRESKA2_DAT); while((fread(&a1,sizeof(Adresar),1,fptr))!=0) { printf ("\n%d. Ime :\t\t%s\n Prezime :\t\t%s\n Broj telefona:\t%s\n Mail adresa:\t\t%s\n ",i++,a1.ime,a1.prezime,a1.br_telefona,a1.mail_adresa); } fclose(fptr); } void greska(Greska status) { fprintf(stderr,poruke_o_greskama[status]); exit(1); } void izmene(void) { int opcija; printf ("\n1.Izmeni broj telefona? \n2.Izmeni mail adresu? \n"); scanf ("%d",&opcija); switch(opcija) { case 1: izmena_br_telefona(); break; case 2: izmena_mail_adrese(); break; default: break; } } void obrisi_podatke(void) { char x; printf ("\nJeste li sigurni? D/N?\n"); fflush(stdin); x=getchar(); if (x=='D'||x=='d') {if((fptr=fopen("adresar.bin","wb"))==NULL) greska(GRESKA2_DAT); fclose(fptr); printf ("\nObrisali ste sve podatke\n");} } void izmena_br_telefona(void) { char br_telefona[MAX]; Adresar s; if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); printf ("\nZa izmenu broja telefona unesite broj telefona koji hocete da izmenite: \n"); fflush(stdin); gets(br_telefona); while (1) { if(fread(&s,sizeof(Adresar),1,fptr)==0) break; if (strcmp(s.br_telefona,br_telefona)==0) { printf ("\nUnesite broj telefona: \n"); fflush(stdin); gets(s.br_telefona); fseek(fptr,-sizeof(Adresar),SEEK_CUR); fwrite(&s,sizeof(Adresar),1,fptr); break; } } fclose(fptr); } void izmena_mail_adrese(void) { char mail_adresa[MAX]; Adresar k; if ((fptr=fopen("adresar.bin","rb+"))==NULL) greska(GRESKA1_DAT); printf ("\nZa izmenu mail adrese unesite mail adresu koju hocete da izmenite: \n"); fflush(stdin); gets(mail_adresa); while(1) { if (fread(&k,sizeof(Adresar),1,fptr)==0) break; if (strcmp(k.mail_adresa,mail_adresa)==0) { printf ("\nUnesite mail adresu: \n"); fflush(stdin); gets(k.mail_adresa); fseek(fptr,-sizeof(Adresar),SEEK_CUR); fwrite(&k,sizeof(Adresar),1,fptr); break; } } fclose(fptr); } |
|
11.12.2012, 22:33 | #6 |
Član
|
Kolega vise elektro? U funkciji unos() stavi "wb" kao write mode da bi kreirao datoteku.
Sent from my PMP5197DULTRA using Tapatalk HD |
11.12.2012, 22:40 | #7 |
Član
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
|
Re: Seminarski iz C-a
|
11.12.2012, 22:53 | #8 |
Član
Član od: 6.2.2012.
Poruke: 151
Zahvalnice: 87
Zahvaljeno 60 puta na 40 poruka
|
Re: Seminarski iz C-a
|
11.12.2012, 22:55 | #9 |
Starosedelac
Član od: 14.6.2011.
Poruke: 2.250
Zahvalnice: 137
Zahvaljeno 440 puta na 399 poruka
|
Re: Seminarski iz C-a
Nema na cemu. Znao sam da je tu negde problem samo nisam bio siguran sta
|
11.12.2012, 23:27 | #10 |
Član
|
|
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Vicevi | Oblivion | Cvet kompjutera | 5481 | 27.5.2022 5:52 |
Java - Vraćanje objekta iz reda tabele | mcdhappy80 | Programiranje | 0 | 2.12.2010 5:13 |
Snimak iz MiniDV u Sony Vegas pa render u DVD? | Zoranb007 | Video/TV softver | 23 | 11.9.2010 21:47 |
Biseri iz reklama... | RarMan | Brbljaonica | 32 | 24.5.2010 20:01 |