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

Prosty kod C++

Object Storage Arubacloud
0 głosów
3,372 wizyt
pytanie zadane 28 sierpnia 2016 w C i C++ przez Julenissen Początkujący (270 p.)

Cześć wszystkim, 

Na stronie Polski SPOJ (kto nie zna, temu polecam do nauki programowania) znalazłem do napisania prosty program który pobiera od użytkownika 2 liczby calkowite, nie większe od 200. Następnie je sumuje i wyrzuca wynik. Banał.

W programie zawarłem warunek do spełnienia dla liczby tak żeby została zaakceptowana i umieściłem go nieskończonej pętli. Mój problem polega na tym, że można podawać programowi nieporawne liczby (on to wychwyci i poprosi o podanie poprawnej liczby) jednak gdy podamy już poprawną liczbę to program się zatrzymuje i nie żąda podania drugiej liczby. Przypuszczam, że jest to związane z tym iż pętla się wykonała do końca. Jednak moja bardzo skromna wiedza podpowiada mi, że program lecąc z góry na dól i wykonując kolejne linie kodu powinien wyjść z pętli i iść dalej, czyż nie? Dlaczego więc program się zatrzymuje?

Pozdrawiam

#include <iostream>

using namespace std;
int a,b;

int main()
{   cout<<"Program sumuje 2 liczby calkowite, nie wieksze od 200"<<endl;

    cout<<"Podaj pierwsza liczbe: ";
    cin>>a;
    while(true)
    {
    if (a<1||a>200)
    {cout<<"Liczba niepoprawna, podaj jeszcze raz: "; cin>>a;}
    }

    cout<<"Podaj druga liczbe: ";
    cin>>b;
    while(true)
    {
    if (b<1||b>200)
    {cout<<"Liczba  niepoprawna, podaj jeszcze raz: "; cin>>b;}
    }

    cout<<a+b;
    return 0;

}

 

3 odpowiedzi

+1 głos
odpowiedź 28 sierpnia 2016 przez niezalogowany
wybrane 28 sierpnia 2016 przez Julenissen
 
Najlepsza

Pętlę:

while(true)
    {
    if (a<1||a>200)
    {cout<<"Liczba niepoprawna, podaj jeszcze raz: "; cin>>a;}
    }

Spróbuj zamienić na:

while(a < 1 || a>200)
    {
    cout<<"Liczba niepoprawna, podaj jeszcze raz: ";
    cin>>a;
    }

Lub po prostu po wykonaniu ifa wyjdź z pętli za pomocą "break".

 

komentarz 28 sierpnia 2016 przez Julenissen Początkujący (270 p.)
Dziękuję Ci bardzo za podpowiedź :) Podmieniona pętla działa
+1 głos
odpowiedź 28 sierpnia 2016 przez Owczarek Niemiecki Obywatel (1,570 p.)
Pętla "while(true)" wykonuje się w nieskończonośc także, nie wyjdzie Ci poza nią :)
komentarz 28 sierpnia 2016 przez Julenissen Początkujący (270 p.)
Masz rację :) dzięki za odpowiedź
0 głosów
odpowiedź 28 sierpnia 2016 przez niezalogowany
Swoją droga, co do wejścia zadań na spoju to nie do końca chodzi o to aby zabezpieczyć przed podaniem niepoprawnych danych tylko to jest dla naszej wiadomości, abyśmy mogli np. dostosować zmienne, ewentualnie jakieś konwersje, nie trzeba robić kontroli, oczywiście jak kto woli ;)

Podobne pytania

0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 16 maja 2016 w JavaScript przez niezalogowany
–2 głosów
2 odpowiedzi 552 wizyt
pytanie zadane 25 kwietnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)
+1 głos
2 odpowiedzi 302 wizyt

92,698 zapytań

141,614 odpowiedzi

320,144 komentarzy

62,058 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

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!

...