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

Problem stold bool nie wykonywany if

Cloud VPS
0 głosów
226 wizyt
pytanie zadane 26 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,490 p.)

Witam

Napisałem program pokazujący mój problem:

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;
bool isnumber( const std::string & v )
{
    for( size_t i = 0; i < v.size(); ++i )
    {
        if( v[ i ] < '0' || v[ i ] > '9' ) return false;

    }
    return true;
}

bool isword( const std::string & v )
{
    for( size_t i = 0; i < v.size(); ++i )
    {
        if( v[ i ] >= '0' && v[ i ] <= '9' ) return false;

    }
    return true;
}
int main()
{
    string liczba;
	long double liczbaprzecinek;
powrot:
        cin >> liczba;
    if (isword(liczba))
    {
        if (liczba == "back")
        {
            goto powrot;
        }
    }
    else
    {
        liczbaprzecinek = stold(liczba);
    }
    if (isnumber(liczba))
    {
        cout << liczbaprzecinek << "*" << liczbaprzecinek << "=" << liczbaprzecinek * liczbaprzecinek << endl;
    }


	////liczbaprzecinek = stold(liczba);
	cout << endl; cout << endl;


    return 0;
}

Dla liczb normalnych np: 234, bez przecinka program działa, z moich badań wynika, że if działa tylko dla liczb bez przecinka, czyli problem może być w bool, tylko nie wiem jaki.

Natomiast gdy podam liczbę z przecinkiem to nie rozpisuje działania i nie podaje wyniku. 

Sprawdzałem czy stold działa, działa poprawnie, nie wiem dlaczego if się wykonuje dla liczb bez przecinka a z przecinkiem już się nie wykonuje. Czy ktoś wie w czym jest problem?

komentarz 26 grudnia 2022 przez piotr_domanski Bywalec (2,490 p.)

zrobiłem takie rozwiązanie, czy to jest dobre ?

#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;

int main()
{
    string liczba;
	long double liczbaprzecinek;
powrot:
        cin >> liczba;
    if (!cin)
    {
        if (liczba == "back")
        {
            goto powrot;
        }
    }
    else
    {
        liczbaprzecinek = stold(liczba);
    }
    if (!cin)
    {

    }
    else
    {
       cout << liczbaprzecinek << "*" << liczbaprzecinek << "=" << liczbaprzecinek * liczbaprzecinek << endl;
    }


	////liczbaprzecinek = stold(liczba);
	cout << endl; cout << endl;


    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 26 grudnia 2022 przez adrian17 Mentor (354,120 p.)

Na moje oko wszystko z stold wygląda poprawnie.

Problem masz tylko niżej:

if (isnumber(liczba))

Tekst "123.456" nie spełnia warunku `isnumber()`, bo Twoja funkcja sprawdza tylko czy tekst się składa z cyfr.

Gdyby nie to, to wszystko by się ładnie wyświetliło.

komentarz 26 grudnia 2022 przez piotr_domanski Bywalec (2,490 p.)
no właśnie, co poprawić w tej funkcji bool
komentarz 26 grudnia 2022 przez adrian17 Mentor (354,120 p.)
No... musisz też zaakceptować kropkę.

A, no i wyrzuć to goto :V
komentarz 26 grudnia 2022 przez piotr_domanski Bywalec (2,490 p.)
wiem, goto to tak na szybko,
komentarz 26 grudnia 2022 przez piotr_domanski Bywalec (2,490 p.)
Powiedz mi czy goto ma wpływ na program oprócz czytelność kodu? Tak skrócie
komentarz 26 grudnia 2022 przez piotr_domanski Bywalec (2,490 p.)
a wiesz jak zaakceptować tą kropkę w tym bool

Podobne pytania

0 głosów
3 odpowiedzi 1,461 wizyt
0 głosów
1 odpowiedź 157 wizyt
pytanie zadane 30 sierpnia 2017 w Rozwój zawodowy, nauka, praca przez Karol Kubicki Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 551 wizyt
pytanie zadane 16 września 2017 w Hostingi, domeny, usługi przez Nocomentor Początkujący (250 p.)

93,453 zapytań

142,448 odpowiedzi

322,718 komentarzy

62,831 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

Kursy INF.02 i INF.03
...