• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Nie działa projekt dotyczący struktur

VPS Starter Arubacloud
+1 głos
77 wizyt
pytanie zadane 20 czerwca 2017 w C i C++ przez Danny203 Nowicjusz (130 p.)
zamknięte 23 czerwca 2017 przez Danny203

Daję kod źródłowy w którym nie działa sortowanie oraz zapis do pliku i proszę o pomoc.

Program miał za zadanie:

  1. dodawanie osoby
  2. usuwanie po nazwisku
  3. wyszukiwanie po nazwisku, wyświetla dane
  4. Drukowanie całej listy
  5. sortowanie po nazwisku albo po wieku(nie działa)
  6. zapis do pliku (nie działa)
  7. 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);

}

 

komentarz zamknięcia: nieakutualne
komentarz 23 czerwca 2017 przez Mateusz Analityk Stary wyjadacz (13,710 p.)
Zeby dodać ci odwagi, też nad tym myślę... ale jestem na to na razie za głupi, a też muszę to umieć.

Podobne pytania

0 głosów
0 odpowiedzi 119 wizyt
0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 14 grudnia 2016 w C i C++ przez Programator Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 282 wizyt
pytanie zadane 6 listopada 2017 w C# przez marcin99b Szeryf (81,480 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...