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

question-closed Wykrywanie błędu w instrukcji warunkowej if.

Object Storage Arubacloud
0 głosów
201 wizyt
pytanie zadane 22 października 2019 w C i C++ przez xZenit Użytkownik (760 p.)
zamknięte 25 października 2019 przez xZenit

Witam, po długim czasie siedzenia nad poprawnym rozwiązaniem i niemożnością znalezienia poprawnej odpowiedzi zwracam się do Państwa z prośbą o sugestię.

Problem najprawdopodobniej tkwi gdzieś w instrukcji warunkowej "if". Program się poprawnie kompiluje, jednak zawsze wykonuje instrukcje, które powinny być wykonane przy spełnieniu warunku pierwszego.

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    string wybor;
    int i, promien;
    cout<<"OBLICZANIE POLA POWIERZCHNI LUB OBJETOSCI KULI"<<endl;
    cout<<"Podaj wartosc dlugosci promienia: "<<endl;
    cin>>promien;
    cout<<"Co chcesz policzyc? Jesli Pole - wcisnij 1 lub p, jesli objetosc - wcisnij 2 lub v. Odpowiedz zatwierdz naciskajac 'Enter'."<<endl;
   

    for (i=1; i<2; i++)

        {   cin>>wybor;

            if (wybor == "p" || 1)
                {
                    cout<<"Pole powierzchni kuli o promieniu "<<promien<<" jest rowne: "<<(4 * M_PI * (promien*promien))<<".";
                    i++;
                }
            else if (wybor == "v" || 2)
                {
                    cout<<"Objetosc kuli o promieniu "<<promien<<" jest rowne: "<<(4/3 * M_PI * (promien*promien*promien))<<".";
                   i++;
                }
            else
                {
                    cout<<"Bledny wybor! Sprobuj ponownie."<<endl;
                }
        }


}

 

komentarz zamknięcia: Znaleziono rozwiązanie problemu.

2 odpowiedzi

+1 głos
odpowiedź 22 października 2019 przez VirtualMember Pasjonat (15,790 p.)
wybrane 22 października 2019 przez xZenit
 
Najlepsza
if (wybor == "p" || 1) to tak jakbyś napisał if (wybor == "p" || true) czyli if(true) -> stąd zawsze pierwszy warunek ci się wykonuje.
komentarz 22 października 2019 przez xZenit Użytkownik (760 p.)
Dziękuję bardzo za pomoc!

Czyli w jaki sposób zmienić 1 aby nie oznaczało już wartości logicznej?
"1" również nie działa
komentarz 22 października 2019 przez Inn Gaduła (4,300 p.)
if (wybor == "p" || wybor=="1")
komentarz 22 października 2019 przez VirtualMember Pasjonat (15,790 p.)

ja bym usunął pętle:

#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    string wybor;
    int i, promien;
    cout<<"OBLICZANIE POLA POWIERZCHNI LUB OBJETOSCI KULI"<<endl;
    cout<<"Podaj wartosc dlugosci promienia: "<<endl;
    cin>>promien;
    cout<<"Co chcesz policzyc? Jesli Pole - wcisnij 1 lub p, jesli objetosc - wcisnij 2 lub v. Odpowiedz zatwierdz naciskajac 'Enter'."<<endl;
    
   cin>>wybor;
 
            if (wybor == "p")
                {
                    cout<<"Pole powierzchni kuli o promieniu "<<promien<<" jest rowne: "<<(4 * M_PI * (promien*promien))<<".";
                    i++;
                }
            else if (wybor == "v")
                {
                    cout<<"Objetosc kuli o promieniu "<<promien<<" jest rowne: "<<(4/3 * M_PI * (promien*promien*promien))<<".";
                   i++;
                }
            else
                {
                    cout<<"Bledny wybor! Sprobuj ponownie."<<endl;
                }
        
 
 
}

Dopasuj ten kod do swoich potrzeb.

komentarz 22 października 2019 przez xZenit Użytkownik (760 p.)

@VirtualMember,
Dobra mam to, zamieniłem po prostu na:

  else if (wybor == "v" || wybor=="2")

i działa. Jeszcze raz wielkie dzięki za tak szybką i dokładną odpowiedź o tej dość specyficznej porze.

Oczywiście oznaczam jako "najlepsza odpowiedź".
Jeszcze raz dzięki!

xZenit

komentarz 22 października 2019 przez xZenit Użytkownik (760 p.)

@Inn
Również dzięki!

komentarz 22 października 2019 przez xZenit Użytkownik (760 p.)
Usuniecie pętli nie wchodzi w grę, ponieważ program wysypał by się po wybraniu błędnej opcji. (po wykonaniu instrukcji pod "else" nastąpiło by zakończenie działania, zamiast powrót do "cin'a".

Problem już rozwiązany.

Dzięki wszystkim za pomoc!

Zamykam.
xZ.
komentarz 25 października 2019 przez xZenit Użytkownik (760 p.)

Właśnie zauważyłem drobny, dodatkowy błąd, który sprawiał, że pętla nie działała w sposób zamierzony.
Zamiast:

for (i=1; i<2; i++)

Musi być:

 for (i=1; i<2; i)

Teraz pętla nie zrywa się po jednokrotnym wykonaniu, a dopiero po spełnieniu odpowiednich warunków (określonych później w "if" oraz "else if").

Wersja finalna kodu znajduje się w dodatkowym komentarzu pod głównym pytaniem.

0 głosów
odpowiedź 25 października 2019 przez xZenit Użytkownik (760 p.)

Finalna, poprawnie kompilująca się i działająca wersja kodu:

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    string wybor;
    int i, promien;
    cout<<"OBLICZANIE POLA POWIERZCHNI LUB OBJETOSCI KULI"<<endl;
    cout<<"Podaj wartosc dlugosci promienia: "<<endl;
    cin>>promien;
    cout<<"Co chcesz policzyc? Jesli Pole - wcisnij 1 lub p, jesli objetosc - wcisnij 2 lub v. Odpowiedz zatwierdz naciskajac 'Enter'."<<endl;


    for (i=1; i<2; i)

        {  cin>>wybor;
            if (wybor == "p" || wybor=="1" )
                {
                    cout<<"Pole powierzchni kuli o promieniu "<<promien<<" jest rowne: "<<(4 * M_PI * (promien*promien))<<".";
                    i++;
                }
            else if (wybor == "v" || wybor=="2")
                {
                    cout<<"Objetosc kuli o promieniu "<<promien<<" jest rowne: "<<(4/3 * M_PI * (promien*promien*promien))<<".";
                   i++;
                }
            else
                {
                    cout<<"Bledny wybor! Sprobuj ponownie."<<endl;
                }
        }


}

 

Podobne pytania

0 głosów
4 odpowiedzi 323 wizyt
0 głosów
2 odpowiedzi 91 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez Demeny Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 387 wizyt
pytanie zadane 23 grudnia 2022 w PHP przez koleś34 Gaduła (3,270 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...