Napisałem taki program:
#include <stdio.h>
#include <stdlib.h>
enum wyksztalcenie{
brak,
podstawowe,
srednie,
wyzsze
};
typedef enum wyksztalcenie tpsch;
typedef struct osoba osoba;
enum{
BRAK_FLAG =0,
CZY_MA_DZIECI =1,
CZY_PO_SLUBIE =2,
CZY_MA_PRACE =4,
CZY_MA_AUTO =8
};
struct osoba{
char imie[25];
char nazwisko[25];
char dataurodzenia[11];
char miejscezamieszkania[255];
tpsch wyk;
char flagi;
osoba* next;
};
osoba* first;
int DodajOsobe_wykonaj(osoba* do_dodania){
do_dodania->next = NULL;
if(first==NULL){
first=do_dodania;
return;
}
osoba*temp;
temp=first;
while(temp->next != NULL){
temp = temp->next;
}
temp->next=do_dodania;
}
void PobierzOsobe(osoba* o){
char c;
printf("Podaj imie: \n");
scanf("%s", o->imie);
printf("Podaj nazwisko: \n");
scanf("%s", o->nazwisko);
printf("Podaj date urodzenia(DD-MM-YYYY): \n");
scanf("%s", &o->dataurodzenia);
printf("Podaj miejsce zamieszkania: \n");
scanf("%s", o->miejscezamieszkania);
printf("Podaj wyksztalcenie: \n");
scanf("%d", &o->wyk);
o->flagi = BRAK_FLAG;
printf("Czy ma dzieci? \n");
scanf("%c", &c);
if(c=='T' || c=='t'){
o->flagi |= CZY_MA_DZIECI;
}
printf("Czy po slubie? \n");
scanf("%c", &c);
if(c=='T' || c=='t'){
o->flagi |= CZY_PO_SLUBIE;
}
printf("Czy ma prace? \n");
scanf("%c", &c);
if(c=='T' || c=='t'){
o->flagi |= CZY_MA_PRACE;
}
printf("Czy ma auto? \n");
scanf("%c", &c);
if(c=='T' || c=='t'){
o->flagi |= CZY_MA_AUTO;
}
}
void DodajOsobe(){
char flagi = BRAK_FLAG;
osoba*o = malloc(sizeof(osoba));
PobierzOsobe(o);
DodajOsobe_wykonaj(o);
system("pause");
system("cls");
menu();
}
void WypiszOsobe(osoba* o){
printf_s("%s %s, urodzony: %s, mieszka w %s i ma wyksztalcenie", o->imie, o->nazwisko, o->dataurodzenia, o->miejscezamieszkania);
switch(o->wyk){
case brak: printf("brak"); break;
case podstawowe: printf("podstawowe"); break;
case srednie: printf("srednie"); break;
case wyzsze: printf("wyzsze"); break;
default: printf("niepoprawne"); break;
}
if(o->flagi&CZY_MA_DZIECI){
printf(" ma dzieci");
}
if(o->flagi&CZY_PO_SLUBIE){
printf(" jest po slubie");
}
if(o->flagi&CZY_MA_PRACE){
printf(" ma prace");
}
if(o->flagi&CZY_MA_AUTO){
printf(" ma auto");
}
printf_s("\n");
}
osoba* first;
void DrukujListe(){
printf_s("----|Lista osob|----\n");
osoba* temp = first;
while(temp != NULL){
WypiszOsobe(temp);
temp=temp->next;
}
printf_s("------------ \n");
system("pause");
system("cls");
menu();
}
void ZapiszDoPliku_wykonaj(osoba* o){
FILE* pFile;
char buffer[1024];
int ec= fopen_s(&pFile, "baza.txt", "a+");
fprintf(pFile, "%s %s %s %s %d %d \n", o->imie, o->nazwisko, o->dataurodzenia, o->miejscezamieszkania, o->wyk, o->flagi);
fclose(pFile);
}
osoba* first;
int ZapiszDoPliku(){
FILE* pFile;
char buffer[256];
int ec=fopen_s(&pFile, "baza.txt","w");
if(ec != 0){
printf("Plik nie zostal odczytany. Blad %d \n",ec);
return 1;
}
fclose(pFile);
osoba* temp = first;
while(temp != NULL){
ZapiszDoPliku_wykonaj(temp);
temp = temp->next;
}
system("cls");
printf("Program pomyslnie zamkniety");
}
void IleOsob(){
int x=0;
osoba* temp = first;
while(temp != NULL){
x++;
temp=temp->next;
}
printf("Lista sklada sie z %d osob \n",x);
system("pause");
system("cls");
menu();
}
void WyczyscListe(){
osoba* temp = first;
if(temp == NULL){
return;
}
while(temp != NULL){
first=temp->next;
free(temp);
temp=first;
}
FILE* pFile;
char buffer[1024];
int ec = fopen_s(&pFile, "baza.txt","w");
fclose(pFile);
system("pause");
system("cls");
menu();
}
osoba* first;
osoba* SzukajOsobe(char* imieszukaj[25], char* nazwiskoszukaj[25]){
osoba*temp = first;
while(temp != NULL){
if(strcmp(imieszukaj,temp->imie) == 0 && strcmp(nazwiskoszukaj, temp->nazwisko) == 0){
return temp;
}
temp = temp->next;
}
return NULL;
}
void ZnajdzOsobe(){
char* imieszukaj[25];
char* nazwiskoszukaj[25];
printf("Podaj imie: \n");
scanf("%s",&imieszukaj);
printf("Podaj nazwisko: \n");
scanf("%s",&nazwiskoszukaj);
osoba*szukany = SzukajOsobe(imieszukaj, nazwiskoszukaj);
if(szukany != NULL){
WypiszOsobe(szukany);
}
else{
printf("W bazie nie ma osoby ktora nazywa sie %s %s \n", &imieszukaj, &nazwiskoszukaj);
}
system("pause");
system("cls");
menu();
}
void UsunOsobe_wykonaj(osoba* doUsuniecia){
osoba* temp = first;
if(temp == NULL){
return;
}
if(temp == doUsuniecia){
first=doUsuniecia->next;
free(doUsuniecia);
return;
}
while(temp->next != NULL){
if(temp->next == doUsuniecia){
temp->next=doUsuniecia->next;
free(doUsuniecia);
return;
}
temp=temp->next;
}
return;
}
void UsunOsobe(){
char* imieusun[25];
char* nazwiskousun[25];
printf("Podaj imie: \n");
scanf("%s",&imieusun);
printf("Podaj nazwisko: \n");
scanf("%s",&nazwiskousun);
osoba*szukany = SzukajOsobe(imieusun, nazwiskousun);
if(szukany != NULL){
printf("Osoba ktroa chcesz usunac: \n");
WypiszOsobe(szukany);
printf("Potwierdz usuniecie wpisujac TAK: \n'");
int operacja;
scanf("%d",&operacja);
if(operacja == 1){
UsunOsobe_wykonaj(szukany);
printf("Pomyslnie usunieta osobe");
system("pause");
system("cls");
menu();
}
}else{
printf("W bazie nie ma osoby ktora nazywa sie %s %s \n",&imieusun, &nazwiskousun);
}
}
int menu(){
int x;
printf("-------------------------------------------------------------------------------------------------- \n");
printf("Menu programu: \n");
printf("Wybierz operacje \n");
printf("1 - Pokaz liste osob \n");
printf("2 - Wyswietl liczbe osob \n");
printf("3 - Znajdz osobe \n");
printf("4 - Dodaj osobe \n");
printf("5 - Usun osobe \n");
printf("6 - Wyczysc liste \n");
printf("7 - Zakoncz dzialanie programu \n");
printf("-------------------------------------------------------------------------------------------------- \n");
printf("Wybierz operacje: ");
do{
scanf("%d", &x);
}while(x<1 || x>8);
printf("\n \n");
switch(x){
case 1: DrukujListe(); break;
case 2: IleOsob(); break;
case 3: ZnajdzOsobe(); break;
case 4: DodajOsobe(); break;
case 5: Usunosobe(); break;
case 6: WyczyscListe(); break;
case 7: break;
default: printf("Blad!");
}
}
int WczytajzPliku(){
FILE* pFile;
char buffer[1024];
int test = 0;
int ec = fopen_s(&pFile, "baza.txt","r+");
if(ec != 0){
printf("Plik nie zostal odczytany. Blad %d \n", ec);
return 1;
}
while(fgets(buffer, sizeof(buffer),pFile) != NULL){
char flagi = BRAK_FLAG;
osoba*o = malloc(sizeof(osoba));
int w=1, k=0, i=0;
for(i=0;i<1024;i++){
if(buffer[i] == '\n'){
break;
}
if(buffer[i] == ' '){
switch(w){
case 1: o->imie[i-k] = '\0'; break;
case 2: o->nazwisko[i-k] = '\0'; break;
case 3: o->dataurodzenia[i-k] = '\0'; break;
case 4: o->miejscezamieszkania[i-k] = '\0'; break;
case 7: break;
}
w++;
k = i+1;
continue;
}else{
switch(w){
case 1: o->imie[i-k] = buffer[i]; break;
case 2: o->nazwisko[i-k] = buffer[i]; break;
case 3: o->dataurodzenia[i-k] = buffer[i]; break;
case 4: o->miejscezamieszkania[i-k] = buffer[i]; break;
case 5:
if(buffer[i] == 48){
o->wyk = 0;
}else if(buffer[i] == 49){
o->wyk = 1;
}else if(buffer[i] == 50){
o->wyk = 2;
}else if(buffer[i] == 51){
o->wyk = 3;
}
break;
case 6: o->flagi = (o->flagi)*10 + (buffer[i]%48)+14; break;
case 7: break;
}
}
}
DodajOsobe_wykonaj(o);
}
fclose(pFile);
}
int main(int argc, char *argv[]) {
printf("Baza danych: ");
first = NULL;
WczytajZPliku();
menu();
ZapiszDoPliku();
return 0;
}
Niestety przy kompilowaniu występuję błąd:
https://imgur.com/a/INxLHKp
Niestety nie jestem w stanie sobie z tym poradzić. Co należy zrobić aby program się kompilował