Kilka pytań do projektu w c++
Ostatnio zmodyfikowano 2017-01-11 06:29
Whiren Temat założony przez niniejszego użytkownika |
Kilka pytań do projektu w c++ » 2017-01-07 21:35:26 Witam Piszę projekt na studia z programowania i mam kilka problemów: 1. Jak porównać ze sobą słowa? Dokładnie chciałbym porównać odznaczenia i jeśli będą takie same to wypiszę mi dane żołnierza na ekranie. Nigdy mi to nie wychodziło i próbowałem tu pójść na łatwiznę ale kompilator krzyczy: void Zestawienie() { if( i != 0 ) { char odz; cout << "Podaj nazwe odznaczenia" << endl; cin >> odz; for( short l = 0; l < i; l++ ) { if( odz == spis[ l ].odznaczenie ) { cout << "x zolnierz nr " << l + 1 << ": " << endl; cout << "x Imie: " << spis[ l ].imie << endl; cout << "x Nazwisko: " << spis[ l ].nazwisko << endl; cout << "x Wiek: " << spis[ l ].wiek << endl; cout << "x Stopien: " << spis[ l ].stopien << endl; cout << "x odznaczenie: " << spis[ l ].odznaczenie << endl; cout << "x nazwa misji: " << spis[ l ].nazwa_misji << endl; cout << "x zold: " << spis[ l ].zold << endl; cout << "x czy na misji: " << spis[ l ].czy_znajduje_sie_na_misji << endl; cout << "x czy w jednostce: " << spis[ l ].czy_stacjonuje_w_jednostce << endl; } else { cout << "Nie ma zolnierza w bazie!! Wcisnij ENTER!"; getchar(); } }
2. Mam w menu switch i wszystko śmiga aż do wyboru 8 , 9 i 0 nie działają :/ int main() { char wybor; do { cout << "Aktualnie posiadasz " << i << " zolnierzy w bazie" << endl; cout << "Aktualnie posiadasz " << m << " misji w bazie" << endl; cout << endl; cout << "1.Dodanie informacji na temat zolnierza\n" << endl; cout << "2.Edycja informacji o zolnierzu\n" << endl; cout << "3.Przegladanie informacji na temat zolnierza \n" << endl; cout << "4.Usuwanie informacji na temat zolnierza\n" << endl; cout << "5.Dodanie informacji na temat misji\n" << endl; cout << "6.Edycja informacji o misji\n" << endl; cout << "7.Przegladanie informacji na temat misji \n" << endl; cout << "8.Usuwanie informacji o misji\n" << endl; cout << "9.Generowanie zestawien zolnierzy z konkretnym odznaczeniem\n" << endl; cout << "0.Generowanie zestawienia danej misji bojowej\n" << endl; cout << "ESC - Koniec programu " << endl << endl; wybor = getch(); system( "cls" ); switch( wybor ) { case 49: Dodaj(); system( "cls" ); break; case 50: Edytuj(); Zapisz(); system( "cls" ); break; case 51: Zobacz(); system( "cls" ); break; case 52: Usun(); Zapisz(); system( "cls" ); break; case 53: Dodaj1(); system( "cls" ); break; case 54: Edytuj1(); Zapisz1(); system( "cls" ); break; case 55: Zobacz1(); system( "cls" ); break; case 56: Usun1(); Zapisz1(); system( "cls" ); break; case 57: cout << "bla"; break; case 0: cout << "blabla"; break; } } while( wybor != 27 ); return 0; }
3. Czy jak zapisuję dane w pliku to czy da się je zapisać na stałe? Chodzi o to,że mam tą bazę żołnierzy, włączam konsolę dodaje żołnierza patrzę czy śmiga, zamykam i zaraz włączam jeszcze raz i muszę znowu wpisywać dane żołnierza. Da się to jakoś zapisać żeby nie znikały mi dane po wyłączeniu konsoli? |
|
karambaHZP |
» 2017-01-07 23:42:06 1. odz to nie słowo tylko jeden znak. 2. prześledź debuggerem. 3. Zapisuj dane do pliku, a przy uruchomieniu wczytuj dane. |
|
Whiren Temat założony przez niniejszego użytkownika |
» 2017-01-08 03:18:08 Dzięki wielkie, błędy wynikające z mojej nieuwagi. Miałem napisaną funkcję wczytującą ale jej nie użyłem, a o tym odz to nie będę komentował nawet. Co do case to jak wkleiłem funkcję w 9 to działa normalnie,problem nadal jest z case 0. Debugger milczy. Ktoś jakieś pomysły? |
|
karambaHZP |
» 2017-01-08 09:55:29 |
|
Whiren Temat założony przez niniejszego użytkownika |
» 2017-01-08 15:35:50 Śmiga wszystko cacy,dzięki wielkie. |
|
Whiren Temat założony przez niniejszego użytkownika |
» 2017-01-11 03:32:50 Jeszcze jedno, mógłby mi ktoś wyjaśnić funkcję "new"? Najlepiej rozumiem jak mam zrobione coś i sam to rozkminiam jak to działa. Znalazłem na funkcję char i śmiga, a jak zamieniam na int albo string to już krzyczy kompilator. cout << "Imie: "; gets( bufor ); imie = new char[ strlen( bufor ) + 1 ]; strcpy( imie, bufor );
cout << "Nazwisko: "; gets( bufor ); nazwisko = new char[ strlen( bufor ) + 1 ]; strcpy( nazwisko, bufor );
cout << "wiek: "; gets( bufor ); wiek = new int[ strlen( bufor ) + 1 ]; strcpy( wiek, bufor ); Czym w tym wypadku różni się char od inta/stringa? Jak to zmienić by śmigało? Szukałem na necie ale ciężko mi idzie zrozumienie tego i jakąś sensowną modyfikację, więc jakby ktoś to przekształcił i napisał kilka słów łopatologicznego wyjaśnienia byłoby miło. |
|
karambaHZP |
» 2017-01-11 06:29:30 Operator new alokuje pamięć. Operator delete , który musi być w parze, zwalnia tą pamięć. int , char , std::string to zupełnie różne typy (o rożnym rozmiarze). Nie można przypisać pamięci alokowanej na typ int do wskaźnika pokazującego na typ char, bo nie będzie umiał wykonać arytmetyki. Dlaczego katujesz się char * zamiast używać std::string ? Dynamiczne zarządzanie pamięcią new i delete |
|
« 1 » |