• 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.

VPS Starter Arubacloud
0 głosów
128 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,100 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 177 wizyt
pytanie zadane 20 listopada 2019 w C i C++ przez PirchHD Obywatel (1,730 p.)
0 głosów
1 odpowiedź 510 wizyt
0 głosów
4 odpowiedzi 244 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 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!

...