Mini baza danych

0

Zaczalem pisac 'mini' baze danych, mam plik z danymi (imie, nazwisko, wiek) wczytuje dane do z pliku a potem chce je wypisac, gdzies natrafiam na blad, a nie bardzo wiem dlaczego. Mógłby ktoś rzucić na to okiem ?

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


int wczytaj_osoby(char nazwa_pliku[],osoba os[]);
void wypisz_osoby(osoby os[], int ilosc)

//************************************************************************************************

typedef struct{
    char imie[12];
    char nazwisko[20];
    int wiek;
    } osoba;


//************************************************************************************************

int main(int argc,char *argv[])
{
int n=0;

n=wczytaj_osoby(argv[1],osoba)
printf("Tabela zawiera %d pol \n",));

void wypisz_osoby(osoby os[], n)

return 0;
}


//************************************************************************************************


int wczytaj_osoby(char nazwa_pliku[],osoba os[]) //funkcja wczytuje dane

{
int n;
n=0;

FILE *fin;

fin = fopen(nazwa_pliku,"r");

if(!fin)
    {
    perror("Blad otwarcia pliku");
    exit(1);
    }

while ((fscanf(fin,"%s %s %d %d",os[n].imie,os[n].nazwisko,&os[n].wiek,)==3)
    {
    n++;
    }

fclose(fin);
return n;
}


//************************************************************************************************

void wypisz_osoby(osoby os[], int ilosc) // funkcja wypisuje dane

{
int i;

for(i=0;i<ilosc;i++)
	{
	prinf("%s %s %d %d",os[n].imie,os[n].nazwisko,&os[n].wiek;
	}
}

Przepraszam, że w święta i takie banały.

1

przecież kompilator ci pokazuje gdzie błąd i nawet pisze jaki.
typedef COS_TAM osoba; // teraz osoba jest typem danych tak jak np int
n=wczytaj_osoby(argv[1],osoba) // zamiast parametry próbujesz przekazać typ coś ala x=sin(double) - to chyba rozumiesz że nie zadziała?

0

Źle się wyraziłem, nie rozumiałem dlaczego, nie zauważyłem że podaje typ.
Ale nadal do końca nie rozumiem.

  1. Mam plik wejściowy z danymi.
  2. Zapisuje strukture.
  3. Pisze funkcję.
  4. Wywołanie funkcji.

Pierwszym argumentem funkcji będzie plik który stworzyłem, podaje go jako parametr funkcji main. Drugim parametrem jest ta struktura która zadeklarowałem (?) czyli zamienić osoby na os ?

#include<stdio.h>
#include<stdlib.h>
 
 
int wczytaj_osoby(char nazwa_pliku[],osoba os[]);
void wypisz_osoby(osoby os[], int ilosc)
 
//************************************************************************************************
 
typedef struct{
    char imie[12];
    char nazwisko[20];
    int wiek;
    } osoba;
 
 
//************************************************************************************************
 
int main(int argc,char *argv[])
{
int n=0;
 
n=wczytaj_osoby(argv[1],osoba)
printf("Tabela zawiera %d pol \n",));
 
void wypisz_osoby(osoby os[], n)
 
return 0;
}
 
 
//************************************************************************************************
 
 
int wczytaj_osoby(char nazwa_pliku[],osoba os[]) //funkcja wczytuje dane
 
{
int n;
n=0;
 
FILE *fin;
 
fin = fopen(nazwa_pliku,"r");
 
if(!fin)
    {
    perror("Blad otwarcia pliku");
    exit(1);
    }
 
while ((fscanf(fin,"%s %s %d",os[n].imie,os[n].nazwisko,&os[n].wiek,)==3)
    {
    n++;
    }
 
fclose(fin);
return n;
}
 
 
//************************************************************************************************
 
void wypisz_osoby(osoby os[], int ilosc) // funkcja wypisuje dane
 
{
int i;
 
for(i=0;i<ilosc;i++)
        {
        prinf("%s %s %d,os[n].imie,os[n].nazwisko,&os[n].wiek);
        }
}
0

Błąd jest prawdopodobnie tutaj:

 
fscanf(fin,"%s %s %d %d",os[n].imie,os[n].nazwisko,&os[n].wiek)

Masz za dużo parametrów formatujących podanych. Za jednym zamachem pobiera się za dużo danych i odczyt następnego obiektu będzie niepoprawny.
Poprawnie powinno być:

fscanf(fin,"%s %s %d",os[n].imie,os[n].nazwisko,&os[n].wiek)
 
0

Właśnie w tym momencie poprawiłem to, wczesniej byly 4 parametry i nie zmieniłem tego.

0

Nadal tego nie skończyłem ;-/

  1. Mam plik wejściowy z danymi.
    Robie sobie dane w trzech kolumnach z odpowiednimi typami.

  2. Zapisuje strukture.

typedef struct{
    char imie[12];
    char nazwisko[20];
    int wiek;
    } osoba;

Zapisany typ struktury to osoba.

  1. Pisze funkcję.

Wczytanie danych:

int wczytaj_osoby(char nazwa_pliku[] ,osoba os[]) //funkcja wczytuje dane
 
{
int n;
n=0;
 
FILE *fin;
 
fin = fopen(nazwa_pliku,"r");
 
if(!fin)
    {
    perror("Blad otwarcia pliku");
    exit(1);
    }
 
while ((fscanf(fin,"%s %s %d",os[n].imie,os[n].nazwisko,&os[n].wiek,)==3)
    {
    n++;
    }
 
fclose(fin);
return n;
}

Wypisuje dane:

void wypisz_osoby(osoby os[], int ilosc) // funkcja wypisuje dane
 
{
int i;
 
for(i=0;i<ilosc;i++)
        {
        prinf("%s %s %d,os[n].imie,os[n].nazwisko,&os[n].wiek);
        }
}
  1. Funkcja main:
int main(int argc,char *argv[])
{
int n=0;
 
n=wczytaj_osoby(argv[1],osoba os)
printf("Tabela zawiera %d pol \n",));
 
void wypisz_osoby(osoby os[], n)
 
return 0;
}

Nadal nie bardzo rozumiem jak maja wygladac wywolania tych funkcji :(
Moglbym prosic kogos o wytlumaczenie gdzie jest blad w moim toku myslowym ?

0

Nikt nie zerknie ;/ ?

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