• 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
253 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 Mentor (355,180 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 326 wizyt
pytanie zadane 20 listopada 2019 w C i C++ przez PirchHD Obywatel (1,730 p.)
0 głosów
1 odpowiedź 788 wizyt
0 głosów
4 odpowiedzi 492 wizyt

93,732 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...