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

question-closed Program nie działa poprawnie po wpisaniu ułamka dziesiętnego do zmiennej typu float.

Object Storage Arubacloud
0 głosów
129 wizyt
pytanie zadane 12 listopada 2019 w C i C++ przez xZenit Użytkownik (760 p.)
zamknięte 13 listopada 2019 przez xZenit

Witam, mój problem polega na tym, że poniższy program zaczyna wypisywać na ekranie "Bledny wybor! Sprobuj ponownie." (pojedyncze wypisanie tej frazy powinno się wykonać dopiero jako działanie 'else') bez końca, gdy jako promień (zmienna: promien) podamy wartosc będącą ułamkiem dziesiętnym (np. 4,3).

Co należy zmienić, w kodzie aby program działał poprawnie (wyliczał wszystko tak, jak to wylicza przy podaniu liczb całkowitych)?
Dodam, że wszystko kompiluje się poprawnie.
Wzory na pole powierzchni i objętość walca są poprawne i nie wymagają weryfikacji.

Proszę o jakąś sugestię dotyczącą usunięcia tego błędu.

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

int main()
{
    string wybor;
    short i;
    float promien, wysokosc, pole, objetosc;
    cout<<"OBLICZANIE POLA POWIERZCHNI LUB OBJETOSCI WALCA"<<endl;
    cout<<"Podaj wartosc dlugosci promienia podstawy: "<<endl;
    cin>>promien;
    cout<<"Podaj wartosc dlugosci wysokosci: "<<endl;
    cin>>wysokosc;
    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" )
                {
                    pole=((2*M_PI*promien)*(promien+wysokosc));
                    cout<<"Pole powierzchni walca o wysokosci "<<wysokosc<<", ktorego dlugosc promienia podstawy wynosi "<<promien<<" jest rowna: "<<setprecision(4)<<fixed<<pole<<".";
                    i++;
                }
            else if (wybor == "v" || wybor=="2")
                {
                    objetosc=(M_PI*pow(promien,2)*wysokosc);
                    cout<<"Objetosc walca o wysokosci "<<wysokosc<<", ktorego dlugosc promienia podstawy wynosi "<<promien<<", jest rowna: "<<setprecision(4)<<fixed<<objetosc<<".";
                   i++;
                }
            else
                {
                    cout<<"Bledny wybor! Sprobuj ponownie."<<endl;
                }
        }


}

 

komentarz zamknięcia: Rozwiązanie problemu.

1 odpowiedź

+2 głosów
odpowiedź 12 listopada 2019 przez adrian17 Ekspert (344,860 p.)
edycja 13 listopada 2019 przez adrian17
 
Najlepsza

np. 4,3

Standardowym separatorem dziesiętnym jest kropka, więc spróbuj 4.3. Można to zmienić grzebiąc z locale, ale jednak bym sugerował dla wygody się przestawić na kropkę ;)

komentarz 13 listopada 2019 przez xZenit Użytkownik (760 p.)
Dzięki wielkie! Wiedziałem, że to musi być jakiś nieduży, dość głupi błąd - o tej porze to się zdarza. Twój komentarz oczywiście oznaczam jako "najlepsza odpowiedź".

Jeszcze raz dzięki za ta szybką i precyzyjną sugestię.
Dobranoc,
xZ

Podobne pytania

0 głosów
0 odpowiedzi 187 wizyt
pytanie zadane 20 listopada 2019 w C i C++ przez PirchHD Obywatel (1,730 p.)
0 głosów
1 odpowiedź 529 wizyt
0 głosów
4 odpowiedzi 250 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...