PRC Temat założony przez niniejszego użytkownika |
Struktury i porównywanie stringów » 2018-05-26 23:19:20 Cześć, mam do zrobienia taki program: W tablicy struktur mogą być przechowywane informacje o osobach wypożyczających książki z pewnej biblioteki, dla każdej: imię, nazwisko, data, sygnatura książki (liczba). Program ma: dopisywać inforamcje o kolejnej osobie znajdować info o osobie zwracającej książkę usuwać informacje o osobie która tę książkę oddała i robić wydruk tablicy struktur. Oto co stworzyłem: #include <stdio.h> #include <math.h>
struct wypozyczenie { char * imie[ 10 ]; char * nazwisko[ 10 ]; char * data[ 10 ]; int sygnatura; };
int main() { int i = 0, j = 0, a; char imie2[ 10 ]; printf( "podaj ile osob chcesz wpisać \n" ); scanf( "%d", & j ); struct wypozyczenie d[ j ]; a = j; printf( "podaj informacje o osobie \n" ); for( i = 0; i < j; i++ ) { printf( "imie (maks 10 znakow) \n" ); scanf( "%s", & d[ i ].imie ); printf( "nazwisko (maks 10 znakow) \n" ); scanf( "%s", & d[ i ].nazwisko ); printf( "podaj sygnature ksiazki \n" ); scanf( "%d", & d[ i ].sygnatura ); printf( "podaj date (odzielone kropkami) \n" ); scanf( "%s", & d[ i ].data ); printf( "________________ \n" ); } printf( "jesli chcesz jeszcze kogos wpisac wcisnij 1, a jesli nie to cokolwiek innego \n" ); scanf( "%d", & j ); switch( j ) { case 1: printf( "podaj ile osob chcesz wpisać \n" ); scanf( "%d", & j ); printf( "podaj informacje o osobie/osobach \n" ); for( i = 0; i < j; i++ ) { printf( "imie (maks 10 znakow) \n" ); scanf( "%s", & d[ i ].imie ); printf( "nazwisko (maks 10 znakow) \n" ); scanf( "%s", & d[ i ].nazwisko ); printf( "podaj sygnature ksiazki \n" ); scanf( "%d", & d[ i ].sygnatura ); printf( "podaj date (odzielone kropkami) \n" ); scanf( "%s", & d[ i ].data ); printf( "________________ \n" ); } break; default: printf( "nie chciales nikogo wiecej wpisac \n" ); break; } system( "cls" ); printf( "podaj imie osoby oddajacej ksiazke: \n" ); scanf( "%s", & imie2 ); for( i = 0; i < a; i++ ) { if( imie2 == * d[ i ].imie ) { printf( " %s \n %s \n %s \n %d \n", & d[ i ].data, & d[ i ].imie, & d[ i ].nazwisko, & d[ i ].sygnatura ); j = i; } } printf( "jesli chcesz skasowac informacje o tej osobie to wcisnij 1, a jesli nie to cokolwiek innego \n" ); scanf( "%d", & i ); switch( i ) { case 1: * d[ j ].data = 0; * d[ j ].imie = 0; * d[ j ].nazwisko = 0; d[ j ].sygnatura = 0; break; default: printf( "nie chciales usuwac \n" ); break; } printf( "zawartosc tablicy to: \n" ); printf( "nr | data | imie | nazwisko | sygnatura | \n" ); for( i = 0; i != a; i++ ) { printf( " %d| %s | %s | %s | %d | \n", i + 1, * d[ i ].data, * d[ i ].imie, * d[ i ].nazwisko, d[ i ].sygnatura ); printf( "____________________________________ \n" ); } return 0; getch(); } [ cpp / ]
Problem jest taki: tam gdzie jest if i por ó wnanie dw ó ch imion, kiedy odpalam program tylko prosi o imi ę, a potem nic nie por ó wnuje, wydruk dziwnie dzia ł a i nie wypisuje wszystkich os ó b, w ka ż dym razie zanim je wypisze to jest jaki ś b ł ą d i musi si ę wy ł ą czy ć, nie wiem czy wybrane przez mnie pomys ł y na zerowanie tablicy, jej wype ł nianie i drukowanie s ą dobre.Prosz ę o pomoc, tylko b ł agam was: jestem ca ł kiem zielony i nie t ł umaczcie mi w stylu "masz UB", albo w jaki ś skomplikowany spos ó b, tylko jak idiocie. Przepraszam za problem. |
|
pekfos |
» 2018-05-26 23:40:26 char * imie[ 10 ]; char * nazwisko[ 10 ]; char * data[ 10 ]; |
Albo wskaźniki, albo tablice. |
|
PRC Temat założony przez niniejszego użytkownika |
» 2018-05-26 23:52:22 To dziwne bo na zajęciach pokazywali nam że w strukturze można tak zrobić, mam nawet zdjęcie ze slajdu (tutaj przepiszę ten fragment):
struct data { int dzien; char *miesiac[4]; int rok; }; |
|
pekfos |
» 2018-05-27 00:11:04 Można tak zrobić, nie znaczy że trzeba tak zawsze robić. U ciebie to nie ma żadnego sensu. |
|
PRC Temat założony przez niniejszego użytkownika |
» 2018-05-27 15:48:28 I to na pewno ma związek z tym że program sam się wyłącza? |
|
YooSy |
» 2018-05-27 16:28:17 Użyj debuggera. Sam zobaczysz gdzie sypie się program. |
|
mateczek |
» 2018-05-28 05:17:15 char * imie[ 10 ];// imię to tablica wskaźników na napisy - dziesięć napisów (gdy za-alokujesz pamięć) char imię[10]; //imie to tablica znaków - 10 liter #include <iostream> #include<cstring> using namespace std;
int main() { char * imie[ 10 ]; imie[ 0 ] = new char[ 10 ]; strcpy( imie[ 0 ], "alicja" ); imie[ 1 ] = new char[ 10 ]; strcpy( imie[ 1 ], "mruczek" ); cout << imie[ 0 ] << " ma " << imie[ 1 ] << endl; delete[] imie[ 0 ]; delete[] imie[ 1 ]; } |
|
PRC Temat założony przez niniejszego użytkownika |
» 2018-05-30 15:28:09 Już poprawiłem, poza tym trzeba było że w pierwszej pętli miał być switch i poza ta pętlą też i parę innych błędów, dziękuję wszystkim. |
|
« 1 » |