Mam mały problem z programem na laborki. Nie chce działać usuwanie i edytowanie elementów listy. Sam przeglądałem kod już kilkakrotnie i dalej nie widzę dlaczego. Pewnie to jakaś pierdoła, której nie dostrzegam więc zwracam się do Was z prośbą o pomoc :D
/*
* File: main.c
* Author: BSCOMP
*
* Created on 16 kwiecień 2012, 18:38
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*
*
*/
typedef struct liczba {
int imaginary, info;
union {
double realf;
int reali;
} u;
struct liczba *kolejna;
} el_listy;
el_listy *pierwszy;
void menu(struct liczba *pierwszy);
void wstaw(struct liczba *pierwszy) {
char *pomoc;
int check = 0, i, j = 0;
struct liczba *element, *suwak;
if (pierwszy == NULL) {
pierwszy = malloc(sizeof (el_listy));
j = 1;
} else {
suwak = pierwszy;
while (suwak->kolejna != NULL) {
suwak = suwak->kolejna;
}
}
element = malloc(sizeof (el_listy));
pomoc = malloc(12);
printf("\npodaj czesc rzeczywista: \n");
scanf("%s", pomoc);
for (i = 0; i != (strlen(pomoc)); ++i) {
if ((isdigit(pomoc[i])) == 0)check = 1;
}
if (check != 0) {
element->u.realf = atof(pomoc);
} else {
element->u.reali = atoi(pomoc);
}
printf("\npodaj czesc urojona: ");
scanf("%s", pomoc);
element->imaginary = (atoi(pomoc));
printf("\n%d\n", element->imaginary);
element->info = check;
if (j != 0) {
pierwszy = element;
} else {
suwak->kolejna = element;
}
free(pomoc);
menu(pierwszy);
}
void wypisz(struct liczba *pierwszy) {
if (pierwszy != NULL) {
el_listy *suwak = pierwszy;
while (suwak != NULL) {
printf("\nczesc rzeczywista:");
if (suwak->info != 0) {
printf("%.3f", suwak->u.realf);
} else printf("%d", suwak->u.reali);
printf("\nczesc urojona:%d", suwak->imaginary);
suwak = suwak->kolejna;
}
} else {
printf("\nlista jest pusta!");
}
menu(pierwszy);
}
void po(struct liczba *pierwszy, struct liczba *element, int *pom) {
el_listy *suwak;
char *pomoc;
int check = 0, i, k = 0, pomoc2, prawda = 0;
pomoc = malloc(12);
printf("\npodaj czesc rzeczywista po ktorej chcesz szukac: \n");
scanf("%s", pomoc);
for (i = 0; i != (strlen(pomoc)); ++i) {
if ((isdigit(pomoc[i])) == 0)check = 1;
}
if (check != 0) {
element->u.realf = atof(pomoc);
} else {
element->u.reali = atoi(pomoc);
}
printf("\npodaj czesc urojona po ktorej chcesz szukac: \n");
scanf("%d", &pomoc2);
element->imaginary = pomoc2;
suwak = pierwszy;
while (suwak != NULL) {
if (check != 0) {
if (suwak->u.realf == element->u.realf) {
k = 1;
if (suwak->imaginary == element->imaginary)k = ++k;
if (k == 2) {
element = suwak;
prawda = 1;
}
}
} else {
if (suwak->u.reali == element->u.reali) {
k = 1;
if (suwak->imaginary == element->imaginary)k = ++k;
if (k == 2) {
element = suwak;
prawda = 1;
}
}
}
if(k==2){break;} else
suwak = suwak->kolejna;
}
if (prawda != 1) {
printf("\n nie znaleziono elementu\n");
} else {
*pom = 1;
}
}
void usun(struct liczba *pierwszy) {
struct liczba *element;
struct liczba *suwak;
int pomoc = 0;
int *ppomoc;
ppomoc = &pomoc;
element = malloc(sizeof (el_listy));
po(pierwszy, element, ppomoc);
if (pomoc == 1) {
suwak = pierwszy;
if (pierwszy == element) {
pierwszy = pierwszy->kolejna;
} else {
while (suwak->kolejna != NULL) {
if (suwak->kolejna == element) {
suwak->kolejna = element->kolejna;
}
suwak = suwak->kolejna;
}
}
free(element);
}
menu(pierwszy);
}
void edytuj(struct liczba *pierwszy) {
struct liczba *element;
struct liczba *suwak;
char *pomoc;
int check = 0, i, j = 0;
int pom = 0;
int *ppomoc;
double realf;
int reali,imaginary;
ppomoc = &pom;
element = malloc(sizeof (el_listy));
po(pierwszy, element, ppomoc);
if (pom == 1) {
printf("\npodaj czesc rzeczywista: \n");
scanf("%s", pomoc);
for (i = 0; i != (strlen(pomoc)); ++i) {
if ((isdigit(pomoc[i])) == 0)check = 1;
}
if (check != 0) {
realf = atof(pomoc);
} else {
reali = atoi(pomoc);
}
printf("\npodaj czesc urojona: ");
scanf("%s", pomoc);
imaginary = (atoi(pomoc));
suwak = pierwszy;
while (suwak != NULL) {
if (suwak == element) {
suwak->imaginary = imaginary;
if (check != 0) {
suwak->u.realf = realf;
} else {
suwak->u.reali = reali;
}
}
suwak = suwak->kolejna;
}
}
menu(pierwszy);
}
void wyszukaj(struct liczba *pierwszy) {
int y;
if (pierwszy == NULL) {
printf("\nlista jest pusta\n");
menu(pierwszy);
} else {
printf("\n1-...usun\n2-...edytuj\n");
scanf("\n%d", &y);
switch (y) {
case 1:
{
usun(pierwszy);
break;
}
case 2:
{
edytuj(pierwszy);
break;
}
}
}
wypisz(pierwszy);
}
void menu(struct liczba *pierwszy) {
int x;
printf("\n1-dodaj\n2-wypisz liste\n3-wyszukaj i...\n4-koniec\n");
scanf("\n%d", &x);
switch (x) {
case 1: wstaw(pierwszy);
break;
case 2: wypisz(pierwszy);
break;
case 3: wyszukaj(pierwszy);
break;
case 4: exit(0);
break;
}
}
int main(int argc, char** argv) {
pierwszy = NULL;
menu(pierwszy);
return (EXIT_SUCCESS);
}