Paqoo Opublikowano 17 Stycznia 2009 Udostępnij Opublikowano 17 Stycznia 2009 Tworzę programik z różnymi opcjami w konsoli. Jest coś takiego, że pyta o podanie poziomu postaci. Jak ma poziom to wylicza coś. Ale później jest: system("PAUSE"); return EXIT_SUCCESS; w funkcji głównej. Chciałbym żeby po podaniu nieprawidłowych danych powracało do pytania. Co zrobić? Chyba da się zainicjować funkcję i się do niej odwołać... Jak to będzie wyglądało? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 17 Stycznia 2009 Udostępnij Opublikowano 17 Stycznia 2009 Najlepiej użyć pętli :) while( true ) { (...) if( Konczymy ) break; } // Koniec aplikacji system("PAUSE"); return EXIT_SUCCESS Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 17 Stycznia 2009 Autor Udostępnij Opublikowano 17 Stycznia 2009 Co to za true? Możesz trochę jaśniej? Rzucam to w bloki kodu pomiędzy case tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 17 Stycznia 2009 Udostępnij Opublikowano 17 Stycznia 2009 WHILE nie posiada case'ów ( To nie switch, tylko pętla ), a te true oznacza że pętla ma się wykonywać puki nie znajdzie na swojej drodze break'a ( Lub wartość 'true' zmieni się na 'false' [ Można używać zmiennych ] ) ;p E: Ups sorki, trochę źle zrozumiałem ;p Wstaw wszystko w tą pętle i można dodawać kilka razy pętle w pętlach ( Chociażby właśnie w tych case'ach ) :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 17 Stycznia 2009 Autor Udostępnij Opublikowano 17 Stycznia 2009 Tak wygląda ten case ze switcha: case 3: std::cout << "Wpisz lvl:" << endl; cin >> lvl; if (lvl>8 and lvl < 10000){ hp=185+5*(lvl-8); mana=30*(lvl-8)+35; capp=470+(lvl-8)*10; }else{hp=0;mana=0;capp=0;cout<<"Podaj lvl od 9 do 10000!"<<endl;} cout << "Twoj druid/sorc ma:" << endl << endl<<endl<< " Hp:" << hp << " Mana:" << mana << " Capp:" << capp << endl << endl << endl; break; Tutaj ta pętla raczej nie pasuje. To wyglądało tak, że powtarzało ten kod cały czas i nie było nic widać... Ogólnie to chciałbym wiedzieć jak zrobić żeby wracało do kodu poprzedniego. Pyta np o imię i podasz źle to wraca do pytania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 18 Stycznia 2009 Udostępnij Opublikowano 18 Stycznia 2009 while( true ) { std::cout << "Wpisz lvl:" << std::endl; std::cin >> lvl; if ( lvl >= 9 && lvl <= 10000) { hp = 185+5*(lvl-8); mana = 30*(lvl-8)+35; capp = 470+(lvl-8)*10; } else { std::cout << "Podaj lvl od 9 do 10000!" << std::endl; continue; } std::cout << "Twoj druid/sorc:\n" << "\n Hp:" << hp << "\n Mana:" << mana << "\n Capp:" << capp << std::endl; break; } E: Dodałem kosmetyczne zmiany ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 18 Stycznia 2009 Autor Udostępnij Opublikowano 18 Stycznia 2009 Tak o to mi chodziło. Dziękuję! :) Ale co mam robić z resztą kodu? Nie ma jakiegoś prostszego sposobu na "wracanie" do pytań lub jakichś innych fragmentów kodu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 18 Stycznia 2009 Udostępnij Opublikowano 18 Stycznia 2009 możesz przecież tworzyć drzewka, np. główna pętla, w której toczy się akcja ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 18 Stycznia 2009 Autor Udostępnij Opublikowano 18 Stycznia 2009 A nie da się prościej?:P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Stycznia 2009 Udostępnij Opublikowano 18 Stycznia 2009 prościej to się tworzy funkcje i je wykorzystuje dla uniwersalności i przejrzystości kodu. Dodatkowo funkcje majace do kilkunastu linii kodu mozesz poprzedzic ją slowem "inline" co sprawi ze kod z niej zostanie wszedzie przepisany tam gdzie zostanie wywolana taka funkcja. Przyspiesza dzialanie programu, ale tez zwieksza jego objetosc. Zreszta c++ to nie assembler ze mozesz skoczyc w dowolne miejsce w kodzie. A petla while to najlatwiejsza metoda do uzyskania tego co chcesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Paqoo Opublikowano 18 Stycznia 2009 Autor Udostępnij Opublikowano 18 Stycznia 2009 Dobra, ale trzeba wiedzieć jeszcze gdzie to wstawić :D To nie takie proste. Ale hrabia sobie poradzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 18 Stycznia 2009 Udostępnij Opublikowano 18 Stycznia 2009 Dodatkowo funkcje majace do kilkunastu linii kodu mozesz poprzedzic ją slowem "inline" co sprawi ze kod z niej zostanie wszedzie przepisany tam gdzie zostanie wywolana taka funkcja inline stosuje się do jak najkrótszych funkcji(kilka linii). Wszystkie długie funkcje(kilkanaście linii), którym dałeś inline i tak prawdopodobnie nie zostaną rozwinięte przez kompilator(dzięki Bogu). A nawet te krótkie właściwie też nie zawsze, wszystko zależy od kompilatora. Więc jak już coś to dla VC stosować __forceinline. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się