Mam maly problem z ponizszym programem :P mianowicie nie wiem czemu nie dodaje mi nic do listy :/ ponadto przy kompilacji wywala kila warningow typu
warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[30]’
nie wiem gdzie popelniam blad:/ problem zapewne tkwi w funkcji dodaj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct EListy {
int id;
char imie[20];
char nazwisko[30];
char data[10];
char miasto[20];
int nr_telefonu;
struct EListy *next;
};
void dodaj(struct EListy *lista, char imie_[20], char nazw_[30], char data_[10], char miasto_[20], int nr_tel_)
{
struct EListy *wsk, *nowy;
wsk = lista;
while (wsk->next != NULL)
{
wsk = wsk->next;
}
nowy = (struct EListy*)malloc(sizeof(struct EListy));
memcpy(nowy -> imie,imie_,20);
memcpy(nowy -> nazwisko,nazw_,30);
memcpy(nowy -> data,data_,10);
memcpy(nowy -> miasto,miasto_,20);
if (wsk==NULL) {
nowy -> id = 1;
} else {
nowy -> id = wsk->id + 1;
}
nowy -> nr_telefonu = nr_tel_;
nowy -> next = NULL;
wsk -> next = nowy;
}
void zapisz_do_pliku(struct EListy *lista)
{
struct EListy *wsk;
FILE *plik;
plik = fopen("baza.txt","w");
while (wsk->next != NULL)
{
//zapis do pliku
fprintf(plik,"%d %s %s %s %s %s %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu);
wsk = wsk->next;
}
}
void odczyt_z_pliku(struct EListy *lista)
{
int id,nrtel;
char imie,nazw,data,miasto;
struct EListy *nowy, *wsk=lista;
FILE *plik;
plik = fopen("baza.txt","r");
while (!EOF)
{
//odczyt z pliku
while (wsk->next != NULL)
{
wsk = wsk->next;
}
nowy = malloc(sizeof(struct EListy));
nowy -> next = NULL;
wsk -> next = nowy;
fscanf(plik,"%d %s %s %s %s %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu);
}
}
void wypisz_liste(struct EListy *lista)
{
struct EListy *wsk = lista;
while(wsk->next != NULL)
{
printf("ID: %d\n Imie: %s\n Nazwisko: %s\n Data ur: %s\n Miasto: %s\n Telefon: %d",wsk->id,wsk->imie,wsk->nazwisko,wsk->data,wsk->miasto,wsk->nr_telefonu);
wsk = wsk->next;
}
}
void usun_z_listy(struct EListy *lista, char naz[])
{
struct EListy *wsk=lista;
while (wsk->next != NULL)
{
if (wsk->next->nazwisko == naz)
{
struct EListy *UsuwanyE=wsk->next;
wsk->next = UsuwanyE->next;
free(UsuwanyE);
} else
{
wsk = wsk->next;
}
}
}
void szukaj(struct EListy *lista, char naz[])
{
struct EListy *wsk=lista;
while(wsk->next != NULL)
{
if(wsk->nazwisko == naz) {
printf("ID: %d\n Imie: %s\n Nazwisko: %s\n Data ur: %s\n Miasto: %s\n Telefon: %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu);
break;
} else {
wsk = wsk->next;
}
}
}
int main()
{
struct EListy *NL;
int a, tel;
char imie[20],nazw[30],datau[10],miasto[20];
NL = malloc(sizeof(struct EListy));
odczyt_z_pliku(NL);
do {
printf("1. Dodaj do bazy\n2.Szukaj\n3. Usun\n4. Zapisz\n5. Wypisz\n6. Zakoncz\n\nCo chcesz zrobic: ");
scanf("%d", &a);
switch (a) {
case 1:
{
printf("\nImie: ");
scanf("%s", &imie);
printf("\nNazwisko: ");
scanf("%s", &nazw);
printf("\nData Urodzenia (MM-DD-RRRR): ");
scanf("%s", &datau);
printf("\nMiasto: ");
scanf("%s", &miasto);
printf("\nTelefon: ");
scanf("%d", &tel);
//printf("aasdf");
dodaj(NL,imie,nazw,datau,miasto,tel);
//printf("1234567587765");
break;
}
case 2:
{
printf("\nPodaj nazwisko szukanej osoby: ");
scanf("%s", &nazw);
szukaj(NL,nazw);
break;
}
case 3:
{
printf("\nPodaj nazwisko osoby,ktora chcesz usunac: ");
scanf("%s", &nazw);
usun_z_listy(NL,nazw);
break;
}
case 4:
{
zapisz_do_pliku(NL);
break;
}
case 5:
{
wypisz_liste(NL);
break;
}
case 6:
{
zapisz_do_pliku(NL);
break;
}
default:
{
zapisz_do_pliku(NL);
break;
}
}
} while(a!=6);
}