Skocz do zawartości

Zaczynam z c++


Paqoo

Rekomendowane odpowiedzi

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

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

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

    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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...