CTRL85 Temat założony przez niniejszego użytkownika |
[C] Listy jako argumenty funckji » 2017-03-22 20:44:35 Witam! Mam ewien problem, a mianowicie chcę napisać funkcję, która będzie Mi uzupełniała listę, jednak to co napisałem nie działa i poza funkcją w liście mam tylko jeden (pierwszy) element. Najdziwniejsze jest to, że Wypełnianie listy przeszkód działa dobrze, ale pozycje węża i jedzenia nie działają. #include <stdio.h> #include <stdlib.h>
typedef struct Wonsz { int PosX; int PosY; int PosZ; struct Wonsz * nast; } Wonrz;
typedef struct Przeszkoda { int PosX; int PosY; int PosZ; char Znak; struct Przeszkoda * nast; } PrzeSzkoda;
typedef struct Zarcie { int PosX; int PosY; int PosZ; int Punkty; char Znak; struct Zarcie * nast; } Jedzonko;
void DodajPrzeszkode( PrzeSzkoda * przeszk, int x, int y, int z, char znak ) { PrzeSzkoda * Temp = przeszk; while( Temp->nast != NULL ) Temp = Temp->nast; Temp->nast = malloc( sizeof( PrzeSzkoda ) ); Temp->nast->PosX = x; Temp->nast->PosY = y; Temp->nast->PosZ = z; Temp->nast->Znak = znak; Temp->nast->nast = NULL; }
void DodajZarcie( Jedzonko ** zarlo, int x, int y, int z, char znak ) { Jedzonko * Temp; Temp = malloc( sizeof( Jedzonko ) ); Temp->PosX = x; Temp->PosY = y; Temp->PosZ = z; Temp->Znak = znak; if( znak == '@' ) Temp->Punkty = 1; else if( znak == '%' ) Temp->Punkty = 2; else if( znak == '$' ) Temp->Punkty = 3; else if( znak == '*' ) Temp->Punkty = 4; if( * zarlo != NULL ) Temp->nast = * zarlo; * zarlo = Temp; }
void DodajFragmentWeza( Wonrz ** wonsz, int x, int y, int z ) { Wonrz * Temp; Temp = malloc( sizeof( Wonrz ) ); Temp->PosX = x; Temp->PosY = y; Temp->PosZ = z; if( * wonsz != NULL ) Temp->nast = * wonsz; * wonsz = Temp; }
void WypiszZarcie( Jedzonko * zarcie ) { Jedzonko * Temp = zarcie; while( Temp ) { printf( "%c:%i;%i;%i", Temp->Znak, Temp->PosX, Temp->PosY, Temp->PosZ ); Temp = Temp->nast; } }
void WypiszPrzeszkody( PrzeSzkoda * przeszk ) { PrzeSzkoda * Temp = przeszk; while( Temp ) { printf( "\n%c:%i;%i;%i", Temp->Znak, Temp->PosX, Temp->PosY, Temp->PosZ ); Temp = Temp->nast; } }
void WypiszWonrza( Wonrz * wonsz ) { Wonrz * Temp = wonsz; while( Temp->nast ) { Temp = Temp->nast; WypiszWonrza( Temp ); } printf( ":%i;%i;%i|", Temp->PosX, Temp->PosY, Temp->PosZ ); }
void WczytajDane( Wonrz * wonsz, PrzeSzkoda * Przeszkody, Jedzonko * Zarelko, char * PrzeszkChar, int * IleRozgrywek, int * Promien, int * Wysokosc, int * IleElementow, int * IlePrzeszkod, int * IleZarcia ) { int x, y, z; printf( "Wprowadz znak przeszkody: " ); * PrzeszkChar = getchar(); printf( "\nWprowadz ilosc rozgrywek: " ); scanf_s( "%i", IleRozgrywek ); printf( "\nWprowadz promien walca: " ); scanf_s( "%i", Promien ); printf( "\nWprowadz wysokosc walca: " ); scanf_s( "%i", Wysokosc ); printf( "\nPosX: " ); scanf_s( "%i", & wonsz->PosX ); printf( "\nPosY: " ); scanf_s( "%i", & wonsz->PosY ); printf( "\nPosZ: " ); scanf_s( "%i", & wonsz->PosZ ); Wonrz * Temp; Temp = malloc( sizeof( Wonrz ) ); printf( "\nPosX: " ); scanf_s( "%i", & Temp->PosX ); printf( "\nPosY: " ); scanf_s( "%i", & Temp->PosY ); printf( "\nPosZ: " ); scanf_s( "%i", & Temp->PosZ ); if( wonsz != NULL ) Temp->nast = wonsz; wonsz = Temp; printf( "\nIle Elementow specjalnych: " ); scanf_s( "%i", IleElementow ); for( int i = 0; i < * IleElementow; i++ ) { char t; char temp; printf( "\nZnak: " ); scanf_s( " %c", & t ); printf( "\nPozycja X: " ); scanf_s( "%i", & x ); scanf_s( " %c", & temp ); printf( "\nPozycja Y: " ); scanf_s( "%i", & y ); scanf_s( " %c", & temp ); printf( "\nPozycja Z: " ); scanf_s( "%i", & z ); if( t == * PrzeszkChar ) { if( * IlePrzeszkod == 0 ) { Przeszkody->PosX = x; Przeszkody->PosY = y; Przeszkody->PosZ = z; Przeszkody->Znak = * PrzeszkChar; Przeszkody->nast = NULL; } else DodajPrzeszkode( Przeszkody, x, y, z, * PrzeszkChar ); IlePrzeszkod += 1; } if( t == '@' || t == '%' || t == '$' || t == '*' ) { if( * IleZarcia == 0 ) { Zarelko->PosX = x; Zarelko->PosY = y; Zarelko->PosZ = z; Zarelko->Znak = t; if( t == '@' ) Zarelko->Punkty = 1; else if( t == '%' ) Zarelko->Punkty = 2; else if( t == '$' ) Zarelko->Punkty = 3; else if( t == '*' ) Zarelko->Punkty = 4; } else DodajZarcie( & Zarelko, x, y, z, t ); * IleZarcia += 1; } } }
int main() { char PrzeszkChar = ' '; int Wysokosc = 0; int Promien = 0; int IleRozgrywek = 0; int IleElementow = 0; int IlePrzeszkod = 0; int IleZarcia = 0; Wonrz * Wenszyk = NULL; Wenszyk = malloc( sizeof( Wonrz ) ); Wenszyk->nast = NULL; PrzeSzkoda * Przeszkody = NULL; Przeszkody = malloc( sizeof( PrzeSzkoda ) ); Przeszkody->nast = NULL; Jedzonko * Zarelko = NULL; Zarelko = malloc( sizeof( Jedzonko ) ); Zarelko->nast = NULL; WczytajDane( Wenszyk, Przeszkody, Zarelko, & PrzeszkChar, & IleRozgrywek, & Promien, & Wysokosc, & IleElementow, & IlePrzeszkod, & IleZarcia ); printf( "\n" ); WypiszWonrza( Wenszyk ); printf( "\n" ); WypiszPrzeszkody( Przeszkody ); printf( "\n" ); WypiszZarcie( Zarelko ); printf( "\n\n" ); } |
|
darko202 |
» 2017-03-23 08:47:11 |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2017-03-23 14:48:43 To może inaczej: #include <stdio.h> #include <stdlib.h>
typedef struct Test { int Pos; struct Test * nast; } test;
void AddElemet( test ** element, int val ) { test * Temp; Temp = malloc( sizeof( test ) ); Temp->Pos = val; if( * element != NULL ) Temp->nast = * element; * element = Temp; }
void FunkcjaDwa( test * elem, int val ) { AddElemet( & elem, 1 ); }
void FunkcjaJeden( test * elem ) { FunkcjaDwa( elem, 1 ); FunkcjaDwa( elem, 2 ); }
int main() { test * element = NULL; element = malloc( sizeof( test ) ); element->nast = NULL; element->Pos = 0; FunkcjaJeden( element ); } Jak zrobić, żeby po wykonaniu takich funkcji mieć listę trzech elementów? Aktualnie w FunkcjiDwa() Dodają się te elementy, ale już w FunkcjiJeden() zostaje tylko ten z maina. A co do Twojego posta - chodzi o to, że w DodajPrzeszkode() dodaje na koniec listy, a w reszcie na początek. |
|
darko202 |
» 2017-03-24 10:48:36 |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2017-03-24 17:54:32 Nie mam pojęcia jak to rozwiązać, próbowałem już chyba wszystkie możliwosci z & oraz * żadna nie zadziałała. |
|
mateczek |
» 2017-03-24 18:40:31 przerób sobie na "c" bo mi się te "maloc" nie chciało kompilować nawet więc zastąpiłem new z c++ #include <stdio.h> #include <stdlib.h> #include<iostream>
typedef struct Test { int Pos; struct Test * nast; } test;
void AddElemet( test ** element, int val ) { test * Temp = new test; Temp->Pos = val; if( * element != NULL ) Temp->nast = * element; * element = Temp; }
void FunkcjaDwa( test ** elem, int val ) { AddElemet( elem, val ); }
void FunkcjaJeden( test ** elem ) { FunkcjaDwa( elem, 1 ); FunkcjaDwa( elem, 2 ); }
int main() { test * element = NULL; element = new test; element->nast = NULL; element->Pos = 0; FunkcjaJeden( & element ); for( test * el = element; el; el = el->nast ) { std::cout << el->Pos << " "; } } |
|
« 1 » |