Czytanie z pliku i pewne obliczenia

2012-09-17 17:26

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Mam taki program opierający się na strukturze:

struct magazyn
{
    char nazwa[30];
    int cena, ilosc;
}magazyn; 

KOD:

void zestawienie(void)
{
    FILE *fp=fopen("magazyn.txt", "r");
    int wartosc=1,suma=0;
    printf("Nazwa towaru\tIlosc\tCena\tWartosc\n");
    while (fread(&magazyn,1,sizeof(magazyn),fp))
    {
        wartosc=(magazyn.ilosc * magazyn.cena);
        printf("%s\t%d\t%d\t%d", magazyn.nazwa,magazyn.cena, magazyn.ilosc, wartosc);
        suma = suma + wartosc;
    }
    printf("\n\n");
    printf("Suma wartosci towarow: %d\n", suma);
    fclose(fp);
} 

Funkcja nie chce wyświetlić wartości zmiennych "wartosc" i "suma"
Ktoś wie dlaczego?

edytowany 2x, ostatnio: lentek91, 2012-09-17 17:26

Pozostało 580 znaków

2012-09-17 17:37
Moderator

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

0

A co się dzieje jak próbujesz je wyświetlić? o_O


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2012-09-17 17:40

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

0

ja zakładam, że ma plik tekstowy, a on robi wczytywanie binarne i robi mu się taka kicha, bo nie ma zera na końcu łańcucha.
Jak wygląda ten plik, czy to jest wynik zapisu przez twój kod (pokaż ten kod), czy coś innego.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2012-09-17 17:40

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Znaczy, wszystko się wyświetla, oprócz zmiennych wartosc i suma
Na dodatek funkcja zawsze wyświetla dodatkową linie z trzema zerami

Tutaj macie kod programu:

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

 struct magazyn
{
    char nazwa[30];
    int cena, ilosc;
}magazyn;

void dodaj(char *nazwa, int ilosc, int cena);
void zestawienie(void);

main()
{
    dodaj(magazyn.nazwa,magazyn.ilosc,magazyn.cena);
    zestawienie();
    system("pause");
}

void dodaj(char *nazwa, int ilosc, int cena)
{
    int i,a;
    FILE *fp=fopen("magazyn.txt", "a");
    printf("Podaj ilosc towarow do dodania: \n");
    scanf("%d", &a);
    for(i=0;i<a;i++)
    {
        printf("\nPodaj nazwe towaru: ");
        scanf("%29s", magazyn.nazwa);
        printf("\nPodaj jego ilosc: ");
        scanf("%d", &magazyn.ilosc);
        printf("\nPodaj jego cene: ");
        scanf("%d", &magazyn.cena);
        fprintf(fp,"%s\t\t%d\t%d\n",magazyn.nazwa,magazyn.ilosc,magazyn.cena);
    }
    fclose(fp);
}

void zestawienie(void)
{
    FILE *fp=fopen("magazyn.txt", "r");
    int wartosc=0,suma=0;
    printf("Nazwa towaru\tIlosc\tCena\tWartosc\n");
    while (fread(&magazyn,1,sizeof(magazyn),fp))
    {
        wartosc=magazyn.ilosc+magazyn.cena;
        printf("%s\t%d\t%d\t%d", magazyn.nazwa,magazyn.cena, magazyn.ilosc, wartosc);
        suma = suma + wartosc;
    }
    printf("\n\n");
    printf("Suma wartosci towarow: %d\n", suma);
    fclose(fp);
}
edytowany 1x, ostatnio: lentek91, 2012-09-17 17:41

Pozostało 580 znaków

2012-09-17 17:40

Rejestracja: 11 lat temu

Ostatnio: 5 lat temu

0

fread to funkcja kiedy czytasz binarnie plik. Wcześniej jednak musisz zapisać binarnie.


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2012-09-17 17:44

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

1

Czyli jest dokładnie tak jak napisałem, zapisujesz dane tekstowe, a czytasz je jako dane binarne.
zmień to fread na fscanf(fp, "%s%d%d", agazyn.nazwa, &magazyn.cena, &magazyn.ilosc);


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2012-09-17 17:52
To jak tego while teraz zrobić? - lentek91 2012-09-17 17:47
to już wiem jak użyć, ale jak robię z tym whilem, to mi program cały czas pracuje bez końca - lentek91 2012-09-17 17:57

Pozostało 580 znaków

2012-09-17 18:11

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Dzięki za pomoc, wszystko działa jak powinno

Pozostało 580 znaków

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