dynamiczna alokacja pamieci

0

Próbuje wmontować tutaj dynamiczną alokację pamięci, słabo to wychodzi. Pomocy :(

 #include<stdlib.h>
#include<string.h>

#define MARKA_SIZE 30
#define ILOSC_AUT  5
#define WYSZUKAJ_NAJTANSZY    1
#define WYSZUKAJ_NAJMLODSZY   2
#define WYSZUKAJ_BEZWYPADKOWE 3

typedef struct {
 char Marka[MARKA_SIZE];
 int Rocznik;
 long Cena;
 char Bez_wypadkowy;
} Auto;

int Menu(){
 int w = 0;
 printf("\n========================================\n");
 printf("1. Wypisz Zawarocs Komisu\n\n");
 printf("Wyszukaj:\n");
 printf("2. Najtanszy samochow\n");
 printf("3. Najmlodszy rocznik\n");
 printf("4. Auta bezwypadkowe\n\n");
 printf("5. Wyjdz\n");
 printf("========================================\n");
 do{
  printf("\nKtora z powyzszych opcji wybierasz?: ");
  fflush(stdin);
  scanf("%d", &w);
 }while(w < 1 && w > 5);
 printf("Twoj wybor: %d\n", w);
 printf("#################################################\n\n");
 return w;
}

void wpisz_auto(Auto ptr[]){ // zapis ptr[] jest rownoznaczy z *ptr
 char m[MARKA_SIZE];
 int r = 0;
 long c = 0;
 char b;

 printf("Podaj marke auta: ");
 fflush(stdin);
 scanf("%s", m);

 printf("Podaj rocznik auta: ");
 fflush(stdin);
 scanf("%d", &r);

 printf("Podaj cene auta: ");
 fflush(stdin);
 scanf("%ld", &c);

 printf("Czy samochod jest bez wypadkowy ?(t/n): ");
 fflush(stdin);
 scanf("%c", &b);

 // pobieranei danych zakonczone
 strcpy(ptr->Marka, m);
 ptr->Rocznik = r;
 ptr->Cena = c;
 ptr->Bez_wypadkowy = b;

 printf("Dziekuje.\n");
}

void wypisz_auto(Auto ptr[]){
 printf("Marka auta    : %s\n",  ptr->Marka);
 printf("Rocznik       : %d\n",  ptr->Rocznik);
 printf("Cena          : %ld\n", ptr->Cena);
 printf("Bez wypadkowy : %c\n",  ptr->Bez_wypadkowy);
}

void wyszukaj(Auto ptr[], int opcja){
 int i;
 int t=0; //temp
 if(opcja == WYSZUKAJ_NAJTANSZY){
  printf("Najtanszy samochod\n");
  for(i=1;i<ILOSC_AUT; i++)
   if(ptr[i].Cena < ptr[t].Cena)
    t = i;
  wypisz_auto(&ptr[t]);
 }else if(opcja == WYSZUKAJ_NAJMLODSZY){
  printf("Najmlodszy samochod\n");
  for(i=1;i<ILOSC_AUT; i++)
   if(ptr[i].Rocznik > ptr[t].Rocznik)
    t = i;
  wypisz_auto(&ptr[t]);
 }else{
  printf("Samochody bez wypadkowe\n");
  for(i=0;i<ILOSC_AUT; i++)
   if(ptr[i].Bez_wypadkowy == 't')
    wypisz_auto(&ptr[i]);

 }
}

void wypisz_komis(Auto ptr[]){
 int i;
 for(i=0;i<ILOSC_AUT;i++){
  wypisz_auto(&ptr[i]);
 }
}

void inicjuj(Auto ptr[]){
 int i=0;
 for(;i<ILOSC_AUT; i++)
  wpisz_auto(&ptr[i]);
}

int main(){
 Auto Komis[ILOSC_AUT];
 int wybor;

 inicjuj(Komis);

 do{
  wybor = Menu(); 
  system("cls");
  if(wybor==1) wypisz_komis(Komis);
  if(wybor==2) wyszukaj(Komis, WYSZUKAJ_NAJTANSZY);
  if(wybor==3) wyszukaj(Komis, WYSZUKAJ_NAJMLODSZY);
  if(wybor==4) wyszukaj(Komis, WYSZUKAJ_BEZWYPADKOWE);
 }while(wybor!=5);

 return 0;
}
0

może zrób żeby ILOSC_AUT nie była zdefiniowana w czasie kompilacji tylko żeby użytkownik podał ilość samochodów które mają być w komisie, ale nie wiem czy o to ci chodzi

0

Próbuje wmontować tutaj dynamiczną alokację pamięci, słabo to wychodzi.

Pamięć przydziela się funkcją malloc(). Ale ty nigdzie nie próbujesz tego zrobić. Więc co ma wychodzić?

I jeszcze jedno. Odnośnie komentarza do funkcji wpisz_auto().

void wpisz_auto(Auto ptr[]){ // zapis ptr[] jest rownoznaczy z *ptr
//...
}

Dotyczy to tylko wskaźników do tablic. Tu powinno być:

void wpisz_auto(Auto* ptr_elem){
//...
} 

gdyż funkcja oczekuje elementu tablicy a nie tablicy.
Deklaracja: Auto Komis[ILOSC_AUT] to zupełnie co innego niż: Auto a zatem i typy wskaźników są inne.
Wpradzie powszwchnie w odniesieniu do tablic używa się wskaźnika zdegradowanego do wskaźnika do pierwszego elementu (Auto ptr_arr zamiennie do Auto ptr[]), ale nigdy nie spotkałem się z przypadkiem "nobilitowania" wskaźnika do elementu do wskaźnika do tablicy. Ten zawsze jest deklarowany tak: Auto ptr.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0