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

0 głosów
67 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 (306,980 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 98 wizyt
pytanie zadane 20 listopada 2019 w C i C++ przez PirchHD Obywatel (1,730 p.)
0 głosów
1 odpowiedź 138 wizyt
0 głosów
4 odpowiedzi 161 wizyt

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...