Błąd "id returned 1 exit status" przy kompilowaniu kodu (Język C)

0

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ł

6

Masz literówki w kodzie, wołasz WczytajZPliku(); a funkcja jest zdefiniowana tak WczytajzPliku(). To samo z case 5: Usunosobe(); break; a definicja void UsunOsobe().

2
several napisał(a):

Masz literówki w kodzie, wołasz WczytajZPliku(); a funkcja jest zdefiniowana tak WczytajzPliku(). To samo z case 5: Usunosobe(); break; a definicja void UsunOsobe().

A przed błędem "ld returned 1 exit status" (ld jak loader, a nie id) są wartościowe komunikaty o błędach - prawdopodobnie wszystko jest wskazane.

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