Napisz program, operujący na trzech tablicach 3 liczb rzeczywistych: NETTO, VAT, CENY. Program ma za zadanie(Problem z wczytaniem do tablicy)

0

Mam napisany taki program wszystko działa fajnie tylko ma pytanie dlaczego do tablicy vat[i] nie chcą przypisać się wartości. Za każdą pomoc będę wdzięczny.
Poniżej podaję kod programu:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void wczytaj_netto(float netto[3])
{
    int i;
    for(i = 0;i<3;i++)
    {
        printf("Podaj cene netto: ");
        scanf("%f",&netto[i]);
    }
}
void wczytaj_vat(int vat[3])
{
    int i;
    int a;

    for(i = 0;i<3;i++)
    {

        printf("Opcja 1: 0%\nOpcja 2: 5%\nOpcja 3: 8%\nOpcja 4: 23%\n");
        printf("Wybierz stawke vat dla %d produktu: ",i);
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            vat[i] = 0;
            break;
        case 2:
            vat[i] = 5;
            break;
        case 3:
            vat[i]= 8;
            break;
        case 4:
            vat[i]= 23;
            break;
        default:
            printf("Wybrales zla opcje!!!!!");
            break;
        }
        printf("%f\n",vat[i]);
    }
}
void oblicz_brutto(float ceny[3],float netto[3],int vat[3])
{
    int i;
    for(i = 0;i<3;i++)
    {
        printf("\n%f %f\n",netto[i],vat[i]);
        ceny[i]=netto[i]+(netto[i]*vat[i])/100;
    }

}
void wypisz_ceny(float ceny[3])
{
    int i;
    for(i = 0;i<3;i++)
    {
        printf("Cena %d produktu: %f\n",i,ceny[3]);
    }
}
int main(void)
{
    float netto[3];
    int vat[3];
    float ceny[3];
    wczytaj_netto(&netto[3]);
    wczytaj_vat(&vat[3]);
    oblicz_brutto(&ceny[3],&netto[3],&vat[3]);
    wypisz_ceny(&ceny[3]);

    return(0);
}
2

Deklarujesz tablice 3-elemantowe int vat[3]; po czym wczytujesz do 4-go elementu wczytaj_vat(&vat[3]); ...

0
void wczytaj_netto(float netto[3])
{
    int i;
    for(i = 0;i<3;i++)
    {
        printf("Podaj cene netto: ");
        scanf("%f",&netto[i]);
    }
}

int main(void)
{
    float netto[3];
    ...
    wczytaj_netto(&netto[3]);
}

Żeby przekazać tablicę (a w zasadzie to wskaźnik na nią) do funkcji, wystarczy zrobić funkcja(tablica), ew. można zrobić funkcja(&tablica[0]). Umieszczając w kodzie funkcja(&tablica[n]), przekazujesz do funkcji adres n-tego elementu - czyli zaczynasz "wstawiać" wartości do tablicy od n-tego elementu, czyli nadpisujesz pamięć znajdującą się za końcem tablicy! Poczytaj trochę o arytmetyce wskaźników.

Poza tym - zapis tablica[3] w liście parametrów funkcji nie ma, de facto, żadnego wpływu na program - może służyć co najwyżej jako dokumentacja. Możesz za to użyć zapisu tablica[static 3] - w tym wypadku kompilator może (choć nie musi ¯\_ツ_/¯ ) zacząć sprawdzać, czy przekazana tablica ma co najmniej trzy elementy.

0

Poprawiłem co zauważyłem:

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

void wczytaj_netto(float netto[],size_t size)
{
    for(size_t i=0;i<size;++i)
    {
        printf("Podaj cene netto dla %lu: ",i+1);
        scanf("%f",netto+i); // ewentualnie &netto[i]
    }
}

void wczytaj_vat(int vat[],size_t size)
{
    static int VATS[]={0,5,8,23};
    static size_t VATSize=sizeof(VATS)/sizeof(*VATS);
    for(size_t idx,i=0;i<size;++i)
    {
        for(size_t k=0;k<VATSize;++k) printf("Opcja %u: %d\n",k+1,VATS[k]);
        printf("Wybierz opcje dla %lu: ",i+1);
        if((scanf("%lu",&idx)==1)&&(1<=idx)&&(idx<=VATSize))
        {
            vat[i]=VATS[idx-1];
            printf("Podatek dla %lu wynosi: %d\n",i+1,vat[i]);
        }
        else
        {
            printf("Blad wprowadzenia musi byc liczba z zakresu %d..%d\n",1,VATSize);
            --i;
        }
    }
}

void oblicz_brutto(float ceny[],float netto[],int vat[],size_t size)
{
    for(size_t idx,i=0;i<size;++i)
    {
        //printf("%f %f\n",netto[i],vat[i]);
        ceny[i]=(netto[i]*(100+vat[i]))/100;
    }
}

void wypisz_ceny(float ceny[],size_t size)
{
    for(size_t idx,i=0;i<size;++i) printf("Cena %lu produktu: %f\n",i+1,ceny[i]);
}

int main(void)
{
    static const size_t size=3;
    float ceny[size],netto[size];
    int vat[size];
    wczytaj_netto(netto,size);
    wczytaj_vat(vat,size);
    oblicz_brutto(ceny,netto,vat,size);
    wypisz_ceny(ceny,size);
    return(0);
}

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