• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nieskończona pętla for (;;)

VPS Starter Arubacloud
0 głosów
779 wizyt
pytanie zadane 11 września 2019 w C i C++ przez Filip Rerek Nowicjusz (190 p.)

Cześć! Wymyśliłem, że napiszę prostą aplikację do obsługi sklepu internetowego. Ma działać na zasadzie "koszyka" na Allegro, gdzie wrzucamy i możemy dalej kontynuować zakupy. I tu postanowiłem użyć nieskończonej pętli for (;;). Czy to jest dobra decyzja? Czy może określić inną pętlę? Wydaje się być prawie dobrze, ale to "prawie" jak zwykle powoduje, że program się sypie. 

#include <cstdlib>
#include <windows.h>
#include <stdio.h>

using namespace std;

int choiceType, backToMainStore, ship;
float summaryPrice, amountDVD, amountBluray, amountCD;
string country, code;

int main()
{

    cout<<"Welcome to our DVD, Blu-ray and CD store! Be aware, that we add 2% tax to SUMMARY PRICE of your purchase"<<endl;

for(;;)

        {
        cout<<"Choose the type of items you wanna buy: "<<endl;
        cout<<endl<<"DVD - choose '1'"<<endl;
        cout<<"Blu-ray - choose '2'"<<endl;
        cout<<"CD - choose '3'"<<endl;
        cout<<"Cancel - choose '4'"<<endl;
        cout<<endl<<"My choice: ";
        cin>>choiceType;

        switch(choiceType)
{

            case 1: cout<<endl<<"DVD price is 12$. How many do you want to order: ";
            cin>>amountDVD;
            cout<<endl<<"Do you want to buy anything else?"<<endl;
            cout<<"Yes - press '1'"<<endl;
            cout<<"No - press '2'"<<endl;
            cout<<"My choice: ";
            cin>>backToMainStore;

            case 2: cout<<endl<<"Blu-ray price is 16$. How many do you want to order: ";
            cin>>amountBluray;
            cout<<endl<<"Do you want to buy anything else?"<<endl;
            cout<<"Yes - press '1'"<<endl;
            cout<<"No - press '2'"<<endl;
            cout<<"My choice: ";
            cin>>backToMainStore;
            break;

            case 3: cout<<endl<<"CD price is 5$. How many do you want to order: ";
            cin>>amountCD;
            cout<<endl<<"Do you want to buy anything else?"<<endl;
            cout<<"Yes - press '1'"<<endl;
            cout<<"No - press '2'"<<endl;
            cout<<"My choice: ";
            cin>>backToMainStore;
            break;

            case 4: cout<<endl<<"You left the store."<<endl;
            exit(0);

            default: cout<<endl<<"There's no number "<<choiceType<<". Please, try again.";
            Sleep(3000);
            break;

        }

            if(backToMainStore==2)

            {
                cout<<endl<<"Do you want us to ship you your ordering: "<<endl;
                cout<<"Yes - choose '1'"<<endl;
                cout<<"No - choose '2'"<<endl;
                cout<<"My choice: ";
                cin>>ship;

                if(ship==1)

                {
                    cout<<endl<<"Shipping costs 10$. If your order costs more than 100$, shipping is for free :)"<<endl;
                    cout<<endl<<"Set your address: "<<endl;
                    cout<<"Your country: ";
                    cin>>country;
                    cout<<"Your code: ";
                    cin>>code;

                    cout<<endl<<"Loading..."<<endl;
                    Sleep(2000);

                    summaryPrice=(amountDVD*12+amountBluray*16+amountCD*5)*1.02;

                    if(summaryPrice>100)

                    cout<<endl<<"You've just ordered as following: "<<endl;
                    cout<<endl<<amountDVD<<". of DVD's, which costs "<<amountDVD*12<<"$."<<endl;
                    cout<<amountBluray<<". of Blu-ray's, which costs "<<amountBluray*16<<"$."<<endl;
                    cout<<amountCD<<". of CD's, which costs "<<amountCD*5<<"$."<<endl;
                    cout<<endl<<"Shipping is for free!"<<endl;
                    cout<<endl<<"Summary price (tax included) is: "<<summaryPrice<<"$."<<endl;
                    cout<<endl<<"Address of shipping is: "<<code<<", "<<country<<"."<<endl;

                    if(summaryPrice<=100)

                    cout<<endl<<"You've just ordered as following: "<<endl;
                    cout<<endl<<amountDVD<<". of DVD's, which costs "<<amountDVD*12<<"$."<<endl;
                    cout<<amountBluray<<". of Blu-ray's, which costs "<<amountBluray*16<<"$."<<endl;
                    cout<<amountCD<<". of CD's, which costs "<<amountCD*5<<"$."<<endl;
                    cout<<endl<<"Shipping costs 10$."<<endl;
                    cout<<endl<<"Summary price (tax and shipping included) is: "<<summaryPrice+10<<"$."<<endl;
                    cout<<endl<<"Address of shipping is: "<<code<<", "<<country<<"."<<endl;
                    exit(0);

                    getchar();getchar();
                }

                if (ship==2)

                {
                    summaryPrice=(amountDVD*12+amountBluray*16+amountCD*5)*1.02;

                    cout<<endl<<"You've just ordered as following: "<<endl;
                    cout<<endl<<amountDVD<<". of DVD's, which costs "<<amountDVD*12<<"$."<<endl;
                    cout<<amountBluray<<". of Blu-ray's, which costs "<<amountBluray*16<<"$."<<endl;
                    cout<<amountCD<<". of CD's, which costs "<<amountCD*5<<"$."<<endl;
                    cout<<endl<<"Summary price (tax included) is: "<<summaryPrice<<"$."<<endl;
                    exit(0);

                    getchar();getchar();
                }


            }

        }

        system("cls");

    return 0;
}

 

Dzięki za każdą odpowiedź! Jutro cały dzień będę pracował i dłubał tak, żeby w końcu się udało. 

Miłego wieczoru :)

komentarz 11 września 2019 przez criss Mędrzec (172,590 p.)
tak, jak najbardziej
komentarz 11 września 2019 przez tkz Nałogowiec (42,000 p.)
Sypie się bo używasz złej biblioteki, zauważ, że masz cin, a libka do scanf.
komentarz 11 września 2019 przez Filip Rerek Nowicjusz (190 p.)
Nie rozumiem, którą bibliotekę zamienić na jaką? Prostsze aplikacje z użyciem pętli for (;;) działały na tej bibliotece.
komentarz 11 września 2019 przez tkz Nałogowiec (42,000 p.)

#include <stdio.h> na iostream, zauważ z czego korzystasz i co kopiujesz. 

http://www.cplusplus.com/reference/cstdio/

http://www.cplusplus.com/reference/iostream/

komentarz 12 września 2019 przez Filip Rerek Nowicjusz (190 p.)
Bez stdio.h nie działa getchar(), wydaje mi się, że musi tutaj być
komentarz 12 września 2019 przez tkz Nałogowiec (42,000 p.)
To albo użyjesz printf i scanf, co ma mały sens, albo dołączysz iostream.

1 odpowiedź

0 głosów
odpowiedź 11 września 2019 przez wiktoz Mądrala (7,040 p.)
Nie rozumiem trochę po co ta pętla. Może wypisuj to menu główne po zakończeniu jakiejś akcji przez co twój kod „sam się zapętli”. Tak prościej mówiąc: po wyborze dostawy pokazujesz menu. Najlepiej pozamykaj wszystko w oddzielne funkcje to będzie ci łatwiej się poruszać w twoim kodzie i będzie łatwiejszy do odczytania dla innych - to dobra praktyka.
komentarz 11 września 2019 przez criss Mędrzec (172,590 p.)
mam tylko nadzieje, że nie chodzi ci o rekurencje
komentarz 11 września 2019 przez Filip Rerek Nowicjusz (190 p.)

@wiktoz, dostawa powinna być na końcu, bo zawsze jest na końcu :P w jaki sposób "po jakiejś akcji"? jak ma się zapętlić bez użycia pętli?

komentarz 12 września 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Rekurencja ma ograniczony limit pamięci ;)
komentarz 12 września 2019 przez j23 Mędrzec (194,920 p.)

@Filip Rerek, zostań przy pętli. Pomysł wiktoz, jeśli dobrze go zrozumiałem, jest kiepski.

komentarz 12 września 2019 przez Filip Rerek Nowicjusz (190 p.)
Też tak myślę, pętla wydaje się okej. Jednak coś zapętla się nie tak, jak powinno. Jeśli odpalisz program, to zauważysz, że wybierając DVD, wpiszesz liczbę jaką chcesz zamówić, a następnie wybierzesz, że chcesz zamówić coś jeszcze, przenosi do Blu-ray zamiast do menu głównego. Ja nie mogę znaleźć błędu :/
komentarz 12 września 2019 przez j23 Mędrzec (194,920 p.)

W pierwszym case nie ma break.

komentarz 12 września 2019 przez Filip Rerek Nowicjusz (190 p.)
I wszystko jasne! :D Dzięki za wszystkie odpowiedzi, pozdro!

Podobne pytania

0 głosów
1 odpowiedź 4,619 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez Arkadiusz Sieczak Początkujący (400 p.)
0 głosów
0 odpowiedzi 421 wizyt
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 7 listopada 2020 w Mikrokontrolery przez xdmik23 Gaduła (3,000 p.)

92,452 zapytań

141,261 odpowiedzi

319,074 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...