marcin107 Temat założony przez niniejszego użytkownika |
[C++] 2 problemy ze stringiem i "wariowaniem programu" » 2012-10-19 23:20:02 Witam mam problem ze swoją "gierką" konsolową, konkretnie gdy chcę zmienić nazwę czegoś i w tej nazwie będzie spacja lub inny dziwny znak, to program wariuje, widać tylko jak program wraca do pierwotnej funkcji int main() i spamuje tekstem "Nie ma takiej opcji", która domyślnie jest w default przy switchu. Podobnie jest w przypadku innych zmiennych już nie mówię o nazwie, jak tylko przypiszę jakiś ukośnik do zmiennej, mój programik nadaję się tylko do restartu... Czy jest jakaś rada na to? Jeżeli potrzeba kodu lub więcej szczegółów, piszcie. |
|
cyklopek11 |
» 2012-10-19 23:26:31 Bez listingu tylko jasnowidz może pomóc :-) |
|
Dragonit |
» 2012-10-20 00:39:34 Pewnie, źle dobierasz typy zmiennych. |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-10-20 09:59:31 int main() { srand( time( 0 ) ); system( "CLS" ); cout << "--> Plemiona <--\n"; cout << "1. Zacznij gre\n"; cout << "0. Wyjdz\n\n"; cout << " -----------------------------------------------------\n"; cout << " | Autor gry: xxx |\n"; cout << " | Wersja gry: done about 74% UNOFFICIAL ALPHA |\n"; cout << " -----------------------------------------------------\n"; int choice = 0; cin >> choice; switch( choice ) { case 1: { wioska(); break; } case 0: { return 0; break; } default: { cout << "Nie ma takiej opcji\n"; choice = 0; main(); } } return 0; }
int wioska() { system( "CLS" ); cout << "Witaj w " << townname << "\n"; cout << "1. Wejdz do ratusza\n"; cout << "2. Wejdz do koszar\n"; cout << "3. Wejdz do gospody\n"; cout << "4. Wejdz do magazynu\n"; cout << "5. Wejdz do kuzni\n\n"; cout << "---------------------\n"; cout << "| 9. Nastepny dzien |\n"; cout << "---------------------\n"; cout << "\n0. Wyjdz z gry\n"; int choice; cin >> choice; switch( choice ) { case 1: { ratusz(); break; } case 2: { if( buildinglvls[ koszarynum ] == 0 ) { cout << "Nie wybudowano jeszcze tego budynku!\n"; Sleep( 1500 ); wioska(); } else koszary(); break; } case 3: { gospoda(); break; } case 4: { magazyn(); break; } case 5: { if( buildinglvls[ 5 ] == 0 ) { cout << "Nie wybudowano jeszcze tego budynku!\n"; Sleep( 1500 ); wioska(); } else kuznia(); break; } case 9: { wieczor(); break; } case 0: main(); default: { brakopcji(); wioska(); } } return 0; }
void ratusz() { int choice; choice = 0; system( "CLS" ); cout << "Ratusz:\n\n"; cout << "1. Zmien nazwe miasta\n"; cout << "2. Ulepszanie budynkow\n"; cout << "3. Spis statystyk\n\n"; cout << "8. Osiagniecia\n\n"; cout << "\n0. Wyjdz z ratusza\n"; cin >> choice; switch( choice ) { case 1: namechange(); case 2: { if( allowbuild != 0 ) buildingupgrades(); else { cout << "Nie mozesz juz dzisiaj budowac!\n"; Sleep( 1500 ); ratusz(); } break; } case 3: stats(); case 8: osiagniecia(); case 0: wioska(); default: { brakopcji(); choice = 0; ratusz(); break; } } }
void namechange() { char name[ 15 ]; system( "CLS" ); cout << "UWAGA: Prosze nie dodawac spacji oraz specjalnych znakow w nazwie\n"; cout << "Spowoduje to blad krytyczny!\n"; cout << "Podaj nowa nazwe: \n"; cin >> name; townname = name; cout << "Nazwa zmieniona!\n"; Sleep( 500 ); ratusz(); }
Oczywiście problem jest w namechange() o czym mówi komunikat "UWAGA...", jak się złamie zakaz, to program jakby do każdej zmiennej przypisuje coś co powoduje wyświetlnie się defaulta ze switcha w każdej z wyżej wymienionych procedur. // ==== Wyżej na globalu mam dodaną string towname, pozostałe zmienne są int |
|
SeaMonster131 |
» 2012-10-20 10:57:33 Zamiast daj to wczyta Ci razem ze spacją. |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-10-20 15:08:16 poprawiłem void namechange() { system( "CLS" ); cout << "UWAGA: Prosze nie dodawac spacji w nazwie\n"; cout << "Spowoduje to blad krytyczny!\n"; cout << "Podaj nowa nazwe: \n"; getline( cin, townname ); cout << "Nazwa zmieniona!\n"; Sleep( 500 ); ratusz(); }
Teraz nic nie mogę wpisać, tylko od razu cofa mnie do procedury, która jest wywoływana na końcu namechange() |
|
Mrovqa |
» 2012-10-20 15:27:46 Teraz nic nie mogę wpisać, tylko od razu cofa mnie do procedury, która jest wywoływana na końcu namechange() |
Tak, cofa do przodu... Używasz wcześniej cin >> var; ? Jeśli tak, to wpadłeś w popularną zasadzkę - przed isntrukcją: getline( cin, townname );
Wyczyść bufor cin, pierwszy znak to zapewne '\n' :) |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-10-20 15:52:03 Nie doczytałem sorrki xd Dodałem cin.sync(); przed pobraniem zmiennej i spacja oraz inne dziwne znaki działają. Teraz tylko pozostaje kwestia, czy po przypisaniu wartości do zmiennej np: wartość " 4/ ", można jakoś tą zmienną wyczyścić żeby mi nie spamowało cały czas defaultem ze switcha?
|
|
« 1 » 2 |