Podzielenie programu na dwa pliki

Odpowiedz Nowy wątek
2015-02-05 00:27
0

Witam.

Mam program zapisujący zawartość struktury w pliku, potrzebuje, aby znajdował się on co najmniej w dwóch plikach, nie jednym, co musze zrobic?

#include <stdio.h>
#include <stdlib.h>
#define MAXTYT 40
#define MAXAUT 40
#define MAXKS 10
struct ksiazka {
    char tytul[MAXTYT];
    char autor[MAXAUT];
    float wartosc;
};
int main(int argc, char* argv[])
{
    struct ksiazka bibl[MAXKS];
    int licznik = 0;
    int index, licznikp;
    FILE* pksiazki;
    int rozmiar = sizeof(struct ksiazka);
    if ((pksiazki = fopen("ksiazki.dat", "a+b")) == NULL) {
        fputs("Nie moge otworzyc pliku ksiazki.dat\n", stderr);
        exit(1);
    }
    rewind(pksiazki);
    while (licznik < MAXKS && fread(&bibl[licznik], rozmiar, 1, pksiazki) == 1) {
        if (licznik == 0)
            puts("Biezaca zawartosc pliku ksiazki.dat:");
        printf("%s by %s: %.2f zl\n", bibl[licznik].tytul,
               bibl[licznik].autor, bibl[licznik].wartosc);
        licznik++;
    }
    licznikp = licznik;
    if (licznik == MAXKS) {
        fputs("Plik ksiazki.dat jest pelny.", stderr);
        exit(2);
    }
    puts("Podaj nowe tytuly ksiazek.");
    puts("Aby zakonczyc, wcisnij [enter] na poczatku wiersza.");
    while (licznik < MAXKS && gets(bibl[licznik].tytul) != NULL
           && bibl[licznik].tytul[0] != '\0') {
        puts("Teraz podaj autora. ");
        gets(bibl[licznik].autor);
        puts("Teraz podaj wartosc.");
        scanf("%f", &bibl[licznik++].wartosc);
        while (getchar() != '\n')
            continue;
        if (licznik < MAXKS)
            puts("Podaj nastepny tytul.");
    }
    puts("Oto lista Twoich ksiazek: ");
    for (index = 0; index < licznik; index++)
        printf("%s, autor: %s, cena: %.2f zl\n", bibl[index].tytul,
               bibl[index].autor, bibl[index].wartosc);
    fwrite(&bibl[licznikp], rozmiar, licznik - licznikp, pksiazki);
    fclose(pksiazki);

    system("PAUSE");
    return 0;
}

Pozostało 580 znaków

2015-02-05 01:11
0

Wrzuć książkę do nagłówka

Pozostało 580 znaków

2015-02-05 09:18
0

Strukture do nagłówka? Ale jak mam to zrobić?

Pozostało 580 znaków

2015-02-05 10:01
0

Utwórz plik ksiazka.h i tam zapakuj swoją strukture.
Następnie dołącz plik książka.h do pliku main.cpp.

Pozostało 580 znaków

2015-02-05 10:57
0

Wszedłem w opcje kompilatora-->katalogi-->pliki nagłowkowe i dodałem tam folder w którym sie znajduje plik ksiazka.h, wszystko działa, ale czy to jest poprawny/optymalny sposób na zrobienie tego?

Pozostało 580 znaków

2015-02-05 11:11
Suchy Suchar
0

nie, miałeś po prostu napisać

#include "ksiazka.h"

Pozostało 580 znaków

2015-02-05 11:41
0

"No such file or directory"

Pozostało 580 znaków

2015-02-05 12:03
0

ksiazka.h musi być w tym samym katalogu co main.cpp

Pozostało 580 znaków

2015-02-05 12:47
0

Zdaje sobie z tego sprawe, zapisałem cały projekt w nowym folderze i mam caly czas ten błąd, oto dowód:

user image

edytowany 4x, ostatnio: Glorn, 2015-02-05 12:49

Pozostało 580 znaków

2015-02-05 15:39
0

Już sobie poradziłem, głupi błąd, a tyle czasu straconego. Teraz dodatkowo do mojego programu pisze funkcje, która będzie liczyć średnią wartość wszystkich podanych książek, wygląda to tak, ale nie działa, gdzie mam błąd?

#include <stdio.h>
#include <stdlib.h>
#define MAXKS 10
#include "ksiazka.h"

float srednia(struct ksiazka* sr);

int main(int argc, char* argv[])
{
    struct ksiazka bibl[MAXKS];
    srednia(bibl);
    int licznik = 0;
    int index, licznikp;
    FILE* pksiazki;
    int rozmiar = sizeof(struct ksiazka);
    if ((pksiazki = fopen("ksiazki.dat", "a+b")) == NULL) {
        fputs("Nie moge otworzyc pliku ksiazki.dat\n", stderr);
        exit(1);
    }
    rewind(pksiazki);
    while (licznik < MAXKS && fread(&bibl[licznik], rozmiar, 1, pksiazki) == 1) {
        if (licznik == 0)
            puts("Biezaca zawartosc pliku ksiazki.dat:");
        printf("%s by %s: %.2f zl\n", bibl[licznik].tytul,
               bibl[licznik].autor, bibl[licznik].wartosc);
        licznik++;
    }
    licznikp = licznik;
    if (licznik == MAXKS) {
        fputs("Plik ksiazki.dat jest pelny.", stderr);
        exit(2);
    }
    puts("Podaj nowe tytuly ksiazek.");
    puts("Aby zakonczyc, wcisnij [enter] na poczatku wiersza.");
    while (licznik < MAXKS && gets(bibl[licznik].tytul) != NULL
           && bibl[licznik].tytul[0] != '\0') {
        puts("Teraz podaj autora. ");
        gets(bibl[licznik].autor);
        puts("Teraz podaj wartosc.");
        scanf("%f", &bibl[licznik++].wartosc);
        while (getchar() != '\n')
            continue;
        if (licznik < MAXKS)
            puts("Podaj nastepny tytul.");
    }
    puts("Oto lista Twoich ksiazek: ");
    for (index = 0; index < licznik; index++)
        printf("%s, autor: %s, cena: %.2f zl\n", bibl[index].tytul,
               bibl[index].autor, bibl[index].wartosc);
    fwrite(&bibl[licznikp], rozmiar, licznik - licznikp, pksiazki);
    fclose(pksiazki);

    system("PAUSE");
    return 0;
}

float srednia(struct ksiazka* sr)
{
    int i;
    float suma;
    for (i = 0; i > MAXKS; i++, sr++) {
        suma = suma + sr->wartosc;
    }
    printf("Srednia wartosc: %f", suma);
}

Pozostało 580 znaków

2015-02-05 16:14
0

Spójrz na warunek pętli for w funkcji srednia :]
Ona nie wykona sie ani razu.
Poza tym to nie jest jednyny błąd w niej.


float srednia(struct ksiazka* sr)
{
    int i;
    float suma = 0;
    for (i = 0; i < MAXKS; i++) {
        suma = suma + sr[i].wartosc;
        printf("Val:%f\n", sr[i].wartosc);
    }
    printf("Srednia wartosc: %f", suma);
}
edytowany 3x, ostatnio: Proxima, 2015-02-05 16:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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