Program za Autoplac pomoc

Program za Autoplac pomoc

offline
  • Pridružio: 16 Okt 2004
  • Poruke: 907
  • Gde živiš: Subotica

Radimo program za skolu, i napisali smo skoro do kraja, i imamo problem da prilikom unosa novog automobila program ulazi u beskonacnu petlju i nikako ne mozemo da smislimo kako da napisemo for petlju i da radi dobro.

Evo koda :

#include<stdio.h> #include<conio.h> #include<string.h> #include<math.h> int main() { char izbor,search,fuel[10]; int u,stanje,euro,kms,year,i; printf("\n Dobrodosli na Auto plac"); struct parking{ char marka[20]; char model[20]; char gorivo[10]; int km; int god; int cena; }; FILE *plac; parking auto1[50]; printf("\n Za unos novog automobila unesite U , za pretragu unesite P, a za listanje dostupnih auta L \n" ); scanf("%c",&izbor); if(izbor=='U') { plac=fopen("plac.txt","r"); fscanf(plac,"%d",&stanje); fclose(plac); plac=fopen("plac.txt","w+"); for(i=stanje;i<stanje+1;i++) { printf("\n Unesite marku auta"); scanf("%s",&auto1[i].marka); fprintf(plac,"%s",&auto1[i].marka); printf("\n Unesite model auta"); scanf("%s",&auto1[i].model); fprintf(plac,"%s",&auto1[i].model); printf("\n Unesite gorivo koje auto koristi"); scanf("%s",&auto1[i].gorivo); fprintf(plac,"%s",&auto1[i].gorivo); printf("\n Unesite kilometrazu"); scanf("%d",&auto1[i].km); fprintf(plac,"%d",&auto1[i].km); printf("\n Unesite godiste u formatu xxxx"); scanf("%d",&auto1[i].god); fprintf(plac,"%d",&auto1[i].god); printf("\n Unesite cenu auta"); scanf("%d",&auto1[i].cena); fprintf(plac,"%d",&auto1[i].cena); stanje ++; } fclose(plac); } else if(izbor=='P') { plac=fopen("plac.txt","r"); printf("\n Za pretragu po gorivu unesite G \n za pretragu po godistu Y \n za pretragu po kilometrazi unesti K \n za pretragu po ceni, unesite C \n"); scanf("%c",&search); if(search=='G') { printf("\n Unesite gorivo koje zelite ( DIZEL/BENZIN/GAS )"); scanf("%s",&fuel[10]); for(i=0;i<stanje;i++) { if(auto1[i].gorivo==fuel) { printf("%s",&auto1[i].marka); printf("%s",&auto1[i].model); printf("%d",&auto1[i].km); printf("%d",&auto1[i].god); printf("%d",&auto1[i].cena); printf("%s",&auto1[i].gorivo); } } } } else if(search=='Y') { printf("\n Unesite od kojeg godista trazite auto (xxxx)"); scanf("%d",&year); for(i=0;i<stanje;i++) { if(auto1[i].god>=year) { printf("%s",&auto1[i].marka); printf("%s",&auto1[i].model); printf("%d",&auto1[i].km); printf("%s",&auto1[i].gorivo); printf("%d",&auto1[i].cena); printf("%d",&auto1[i].god); } } } else if(search=='K') { printf("\n Unesite do koje kilometraze trazite auto"); scanf("%d",&kms); for(i=0;i<stanje;i++) { if(auto1[i].km<=kms) { printf("%s",&auto1[i].marka); printf("%s",&auto1[i].model); printf("%s",&auto1[i].gorivo); printf("%d",&auto1[i].god); printf("%d",&auto1[i].cena); printf("%d",&auto1[i].km); } } } else if(search=='C') { printf("\n Unesite do koje cene trazite auto"); scanf("%d",&euro); for(i=0;i<stanje;i++) { if(auto1[i].cena<=euro) { printf("%s",&auto1[i].marka); printf("%s",&auto1[i].model); printf("%d",&auto1[i].km); printf("%d",&auto1[i].god); printf("%s",&auto1[i].gorivo); printf("%d",&auto1[i].cena); } } } else { for(i=0;i<stanje;i++) { printf("%s",&auto1[i].marka); printf("%s",&auto1[i].model); printf("%d",&auto1[i].km); printf("%d",&auto1[i].god); printf("%s",&auto1[i].gorivo); printf("%d",&auto1[i].cena); } } fclose(plac); getch(); return 0; }

Stanje predstavlja broj automobila na placu.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

for(int i=stanje; i<stanje+1; i++) {    ...    stanje++;     // ovo ti je greska }

Zasto u opste to stavljas u for petlji ako vec unosis samo jedno auto, a plus nisi nigdje dodijeli vrijednost promenljivoj stanje ..
napisi bez petlje i na kraju stavis stanje++
Imas gresaka kod fprintf() funkcije, makni '&' znak ispred promenljive.
Koristi swich umjesto if-else if-else



offline
  • Pridružio: 16 Okt 2004
  • Poruke: 907
  • Gde živiš: Subotica

Radi ako stavim bez for petlje, ali kako onda da unesem jos jedan auto, tada mi radi samo za unos jednog auta ? Ispravio sam greske kod fprintf.

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

onda bi mogao da uradis ovako nesto:

do {    unesi_auto(); } while ( jos_auta() != 0 )

funkcija jos_auta() ti vrace 1 ako zelis da uneses jos jedno auto a 0 ako ne zelis vise, e sad sta ces da pises u njoj da li ces da pitas korisnika da li zelis da uneses jos jedno auto ili ne, to prepustam tebi.

A takodje bi mogao prvo da pitas kolko auta zelite da unesete, pa onda for petlja od I to N ... Very Happy

I jedan mali savjet: Nemoj sve da trpas u main. Napravi posebno funkcije - kod ti je pregledniji i ako ti nesto pravi problem mnogo brze otkrivas i resavas Very Happy

offline
  • Pridružio: 16 Okt 2004
  • Poruke: 907
  • Gde živiš: Subotica

Uradili smo sve sem pretrage, pretraga radi za gorivo, za ostala tri nece da radi, i ne mozemo da nadjemo nikako gresku, cenili bismo da neko pomogne !

#include<stdio.h> #include<conio.h> #include<string.h> #include<math.h> int main() { char izbor,search,fuel[10],z,q,string[15],gorivo[]="GORIVO",godina[]="GODINA",kilometraza[]="KILOMETRAZA",cena[]="CENA"; int u,euro,stanje,nstanje,kms,year,i,j,broj,x,y,c,v,b; printf("\n Dobrodosli na Auto plac"); struct parking{ char marka[20]; char model[20]; char gorivo[10]; int km; int god; int cena; }; FILE *plac; parking auto1[50]; plac=fopen("plac.txt","r"); fscanf(plac,"%d",&stanje); for(i=0;i<stanje;i++) { fscanf(plac,"%s",&auto1[i].marka); fscanf(plac,"%s",&auto1[i].model); fscanf(plac,"%s",&auto1[i].gorivo); fscanf(plac,"%d",&auto1[i].km); fscanf(plac,"%d",&auto1[i].god); fscanf(plac,"%d",&auto1[i].cena); } fclose(plac); /*OVDE TREBA DO*/ printf("\n Za unos novog automobila unesite U , za pretragu unesite P, a za listanje dostupnih auta L \n" ); scanf("%c",&izbor); if(izbor=='U') { printf("Koliko auta zelite da unesete ? \n"); scanf("%d",&broj); for(i=stanje;i<stanje+broj;i++) { printf("\n Unesite marku auta"); scanf("%s",&auto1[i].marka); printf("\n Unesite model auta"); scanf("%s",&auto1[i].model); printf("\n Unesite gorivo koje auto koristi"); scanf("%s",&auto1[i].gorivo); printf("\n Unesite kilometrazu"); scanf("%d",&auto1[i].km); printf("\n Unesite godiste u formatu xxxx"); scanf("%d",&auto1[i].god); printf("\n Unesite cenu auta"); scanf("%d",&auto1[i].cena); } nstanje=stanje+broj; plac=fopen("plac.txt","w"); fprintf(plac,"%d",nstanje); for(i=0;i<nstanje;i++) { fprintf(plac,"\n %s",auto1[i].marka); fprintf(plac,"\n %s",auto1[i].model); fprintf(plac,"\n %s",auto1[i].gorivo); fprintf(plac,"\n %d",auto1[i].km); fprintf(plac,"\n %d",auto1[i].god); fprintf(plac,"\n %d",auto1[i].cena); } fclose(plac);} else if(izbor=='P') { plac=fopen("plac.txt","r"); fscanf(plac,"%d",&nstanje); for(i=0;i<nstanje;i++) { fscanf(plac,"%s",&auto1[i].marka); fscanf(plac,"%s",&auto1[i].model); fscanf(plac,"%s",&auto1[i].gorivo); fscanf(plac,"%d",&auto1[i].km); fscanf(plac,"%d",&auto1[i].god); fscanf(plac,"%d",&auto1[i].cena); } printf("\n Za pretragu po gorivu unesite G \n za pretragu po godistu Y \n za pretragu po kilometrazi unesti K \n za pretragu po ceni, unesite C \n"); scanf("%s",&string); c=strcmp(string,godina); v=strcmp(string,kilometraza); b=strcmp(string,cena); x=strcmp(string,gorivo); if(x==0) { printf("\n Unesite gorivo koje zelite ( DIZEL/BENZIN/GAS )"); scanf("%s",&fuel); for(i=0;i<nstanje;i++) { y=strcmp(fuel,auto1[i].gorivo); if(y==0) { printf("%s",auto1[i].marka); printf("%s",auto1[i].model); printf("%d",auto1[i].km); printf("%d",auto1[i].god); printf("%d",auto1[i].cena); printf("%s",auto1[i].gorivo); } } } fclose(plac); } else if(c==0) { printf("\n Unesite od kojeg godista trazite auto (xxxx)"); scanf("%d",&year); for(i=0;i<nstanje;i++) { if(auto1[i].god>=year) { printf("%s",auto1[i].marka); printf("%s",auto1[i].model); printf("%d",auto1[i].km); printf("%s",auto1[i].gorivo); printf("%d",auto1[i].cena); printf("%d",auto1[i].god); } } } else if(v==0) { printf("\n Unesite do koje kilometraze trazite auto"); scanf("%d",&kms); for(i=0;i<nstanje;i++) { if(auto1[i].km<=kms) { printf("%s",auto1[i].marka); printf("%s",auto1[i].model); printf("%s",auto1[i].gorivo); printf("%d",auto1[i].god); printf("%d",auto1[i].cena); printf("%d",auto1[i].km); } } } else if(b==0) { printf("\n Unesite do koje cene trazite auto"); scanf("%d",&euro); for(i=0;i<nstanje;i++) { if(auto1[i].cena<=euro) { printf("%s",auto1[i].marka); printf("%s",auto1[i].model); printf("%d",auto1[i].km); printf("%d",auto1[i].god); printf("%s",auto1[i].gorivo); printf("%d",auto1[i].cena); } } fclose(plac);} else if(izbor=='L') { plac=fopen("plac.txt","r"); fscanf(plac,"%d",&nstanje); for(i=0;i<nstanje;i++) { fscanf(plac,"%s",&auto1[i].marka); fscanf(plac,"%s",&auto1[i].model); fscanf(plac,"%s",&auto1[i].gorivo); fscanf(plac,"%d",&auto1[i].km); fscanf(plac,"%d",&auto1[i].god); fscanf(plac,"%d",&auto1[i].cena); } for(i=0;i<nstanje;i++) { printf("\n %s",auto1[i].marka); printf("\n %s",auto1[i].model); printf("\n %d",auto1[i].km); printf("\n %d",auto1[i].god); printf("\n %s",auto1[i].gorivo); printf("\n %d",auto1[i].cena); } fclose(plac); } getch(); return 0; }

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Kolko mogu da vidim ti uporedjujes promenljive
gorivo[]="GORIVO",godina[]="GODINA",kilometraza[]="KILOMETRAZA",cena[]="CENA";

sa karakterom
printf("\n Za pretragu po gorivu unesite G \n za pretragu po godistu Y \n za pretragu po kilometrazi unesti K \n za pretragu po ceni, unesite C \n"); scanf("%s",&string);
Tako da ti funkcija strcmp uporedjuje na primer ovo
strcmp( "G", "GORIVO" );
Ddruga stvar kad unosis string ( %s ) ne koristis operator AND (&)
scanf("%s", str);

treca stvar, sredi malo kod, ja nema trika da mogu da se snadjem xD
Napisi sve pojedinacno. Ako vec pises u C++ iskoristi sve njegove mogucnosti. Koristi strukturu da predstavis jedan auto, a za parking odradi ovo:
std::vector<struct Auto> vParking

i samo trpaj, nema potrebe da vodis racuna o duzini niza. Template klasa vector sve radi sama za tebe.
I mozes da koristsi duplo manje promenljivih i da ti kod bude troduplo manji Very Happy

offline
  • Pridružio: 16 Okt 2004
  • Poruke: 907
  • Gde živiš: Subotica

Skontali smo, uspeli smo da odradimo da sve radi, jos je ostalo da napravimo da se program po zavrsetku jedne od operacija vraca na pocetni meni i gotovi smo, hvala ti na pomoci Very Happy

Te vektore koje spominjes nismo jos radili, i ovo sto smo radili su bas neke osnove, kontam da krenem da ucim neki drugi jezik, ali jbg ovo se radi u skoli Very Happy

Hvala ti jos jednom na pomoci Smile

Ko je trenutno na forumu
 

Ukupno su 650 korisnika na forumu :: 29 registrovanih, 8 sakrivenih i 613 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 9k38, _Rade, A.R.Chafee.Jr., amaterSRB, Areal84, babaroga, BlackPhantom, Bojan5150, Boris90, dozorni, FOX, Igrutinovic, Insan, Kruger, Krusarac, Lošmi, Milan A. Nikolic, moldway, nenad81, nobutado, pavle_pzs, pera12345, repac, sekretar, sizif, VJ, Vlada78, Yellow Pinky, YU-UKI