Daję kod źródłowy w którym nie działa sortowanie oraz zapis do pliku i proszę o pomoc.
Program miał za zadanie:
- dodawanie osoby
- usuwanie po nazwisku
- wyszukiwanie po nazwisku, wyświetla dane
- Drukowanie całej listy
- sortowanie po nazwisku albo po wieku(nie działa)
- zapis do pliku (nie działa)
- odczyt z pliku
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <io.h> #include <cstringt.h> using namespace std; typedef struct osoba { char imie[25]; char nazwisko[50]; int wiek; struct osoba* nast; struct osoba* pop; }*os_wsk; //dodawanie nowej osoby os_wsk dodawanie(os_wsk poprzedni) { //alokacja pamieci na strukture os_wsk nowa_os = malloc(sizeof(struct osoba)); //wprowadzanie danych nowej osoby printf("Wpisz imie: \n"); char temp[25]; scanf("%s", temp); strcpy(nowa_os->imie, temp); printf("Podaj Nazwisko: \n"); scanf("%s", temp); strcpy(nowa_os->nazwisko, temp); printf("Wprowadz swoj wiek\n"); int temp2; scanf("%d", &temp2); nowa_os->wiek = temp2; // wskaźniki na następnego i poprzedniego nowa_os->pop = poprzedni; nowa_os->nast = NULL; if (poprzedni != NULL) poprzedni->nast = nowa_os; return nowa_os; } //wyswietlenie jednej osoby void wys_jednej(os_wsk szukany) { printf(" %s %s %d\n", szukany->imie, szukany->nazwisko, szukany->wiek); } //sortowanie listy void sortowanie_listy(os_wsk* pocz_listy) { os_wsk nowa = NULL; os_wsk temp; os_wsk pom; while (pocz_listy != NULL) { temp = malloc(sizeof(struct osoba)); strcpy(temp->imie, (*pocz_listy)->imie); strcpy(temp->nazwisko, (*pocz_listy)->nazwisko); temp->wiek = (*pocz_listy)->wiek; temp->nast = NULL; temp->pop = NULL; if (nowa == NULL) nowa = temp; else if (strcmp(nowa->nazwisko, temp->nazwisko) > 0) { temp->nast = nowa; nowa->pop = temp; nowa = temp; } else { pom = nowa; while (pom->nast != NULL && strcmp(pom->nast->nazwisko, temp->nazwisko) < 0) pom = pom->nast; temp->pop = pom; temp->nast = pom->nast; if (pom->nast != NULL) pom->nast->pop = temp; pom->nast = temp; } pom = (*pocz_listy); (*pocz_listy) = (*pocz_listy)->nast; free(pom); } (*pocz_listy) = nowa; } /* //odczyt z pliku void odczyt_z_pliku(char* plik,os_wsk pocz_listy) { FILE *ot; ot=fopen(plik,"r"); os_wsk temp; os_wsk pom; if (od==NULL) printf("nie mozna otworzyc pliku"); else { while(fscanf(plik,"%s %s %d",temp->imie,temp->nazwisko,&temp->wiek) != EOF) //alokacja pamieci na nowy element pom=(malloc(sizeof(struct osoba); pom->nast=NULL; pom->pop=NULL; strcpy(temp->imie, (*pocz_listy)->imie); strcpy(temp->nazwisko, (*pocz_listy)->nazwisko); } fclose(ot); } */ //szukanie po nazwisku void wyszukanie(os_wsk pocz_listy) { char szukam[20]; printf("Wpisz nazwisko osoby ktora chcesz znalezc\n"); scanf("%s", szukam); os_wsk szukany = pocz_listy; int odnaleziony = 0; while (szukany != NULL) { if (strcmp(szukany->nazwisko, szukam) == 0) { printf("znaleziono osobę/y o takim nazwisku\n"); wys_jednej(szukany); odnaleziony = 1; } szukany = szukany->nast; } if (odnaleziony == 0) printf("Nie znaleziono nikogo o takim nazwisku\n"); } //usuwanie całej listy void usuwanie_wszystko(os_wsk pocz_listy) { os_wsk temp = pocz_listy; os_wsk usuwany; while (temp != NULL) { usuwany = temp; temp = temp->nast; free(usuwany); } } //usuwanie konkretnej osoby void usuwanie_os(os_wsk* pocz_listy, os_wsk* kon_listy) { char szukam[25]; printf("Kogo chcesz usunac? (wpisz nazwisko)"); scanf("%s", szukam); os_wsk szukany = *pocz_listy; os_wsk do_usuniecia; while (szukany != NULL) { if (strcmp(szukany->nazwisko, szukam) == 0) { //sprawdzenie czy jest jedyny element if (szukany == *kon_listy) { free(szukany); *pocz_listy = NULL; *kon_listy = NULL; break; } do_usuniecia = szukany; if (*pocz_listy == do_usuniecia) *pocz_listy = do_usuniecia->nast; if (*kon_listy == do_usuniecia) *kon_listy = do_usuniecia->pop; szukany->pop->nast = szukany->nast; szukany->nast->pop = szukany->pop; szukany = szukany->nast; free(do_usuniecia); } else { szukany = szukany->nast; } } } void zapisz_do_pliku(char* plik, os_wsk pocz_listy) { FILE *ws; ws = fopen(plik, "w"); os_wsk temp = pocz_listy; if (pocz_listy == NULL) printf("Lista jest pusta\n"); else { while (temp != NULL) { fprintf(ws, "%s %s %d\n", temp->imie, temp->nazwisko, temp->wiek); temp = temp->nast; } } fclose(ws); } void wyswietl_cala_liste(os_wsk pocz_listy) { os_wsk temp = pocz_listy; if (temp == NULL) printf("Lista jest pusta\n"); else { while (temp != NULL) { printf("%s %s %d\n", temp->imie, temp->nazwisko, temp->wiek); temp = temp->nast; } } } void menu(int *w) { int z; printf("Wybierz opcje\n"); printf("1-dodaj osobe\n"); printf("2-usun osobe po nazwisku\n"); printf("3-usunac cala liste\n"); printf("4-znajdz osobe\n"); printf("5-wyswietl cala liste\n"); printf("6-posortuj liste\n"); printf("7-zapisz\n"); printf("8-odczytaj\n"); printf("9-exit\n"); scanf("%d", &z); *w = z; } int main(int ilosc_argumentow, char** argumenty) { os_wsk pocz_listy = NULL; os_wsk kon_listy = NULL; int k; do { menu(&k); switch (k) { case 1: kon_listy = dodawanie(kon_listy); if (pocz_listy == NULL) pocz_listy = kon_listy; break; case 2: usuwanie_os(&pocz_listy, &kon_listy); break; case 3: usuwanie_wszystko(pocz_listy); pocz_listy = NULL; kon_listy = NULL; break; case 4: wyszukanie(pocz_listy); break; case 5: wyswietl_cala_liste(pocz_listy); break; case 6: sortowanie_listy(&pocz_listy); break; case 7: zapisz_do_pliku(argumenty[1], pocz_listy); break; case 8: break; } } while (k != 9); }