Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Struktury i porównywanie stringów

Ostatnio zmodyfikowano 2018-05-30 15:28
Autor Wiadomość
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:

C/C++
#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.
P-171264
pekfos
» 2018-05-26 23:40:26
C/C++
char * imie[ 10 ];
char * nazwisko[ 10 ];
char * data[ 10 ];
Albo wskaźniki, albo tablice.
P-171265
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;
};
P-171266
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.
P-171267
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?
P-171273
YooSy
» 2018-05-27 16:28:17
Użyj debuggera. Sam zobaczysz gdzie sypie się program.
P-171274
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

C/C++
#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 ];
}
P-171281
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.
P-171308
« 1 »
  Strona 1 z 1