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

przecinek i kropka w c++

Object Storage Arubacloud
+1 głos
885 wizyt
pytanie zadane 27 lutego 2022 w C i C++ przez Ciawes Użytkownik (530 p.)
edycja 27 lutego 2022 przez Ciawes
Hejka jak mam napisac poprawnie kod aby przy wpisywaniu wartosci z przecinkiem, ten przecinek bedzie zamieniany w kropke aby kompilator nie wywalal bledu lub wyliczal dziwne wartosci
komentarz 28 lutego 2022 przez j23 Mędrzec (194,920 p.)

aby kompilator nie wywalal bledu

W runtime to nie kompilator wywala błąd.

1 odpowiedź

0 głosów
odpowiedź 27 lutego 2022 przez VBService Ekspert (253,400 p.)
edycja 28 lutego 2022 przez VBService

Możesz wprowadzaną liczbę "traktować" jako string i po zamianie przecinka na kropkę "rzutować" np. na float

float comma2Dot(string number)
{
    for (int i=0; i<number.length(); i++)
        if (number[i] == ',')
        {
            number[i] = '.';
            break;
        }
    return stof(number);
}

 

1
komentarz 27 lutego 2022 przez Ciawes Użytkownik (530 p.)
moglbys mi to wytlumaczyc dokladniej, prosze, ja sie ucze dopiero wiec nie ogarniam az tak
komentarz 28 lutego 2022 przez VBService Ekspert (253,400 p.)
edycja 28 lutego 2022 przez VBService

Jest to funkcja o nazwie comma2Dot (nazwa dowolna - nadawanie nazw dla funkcji)

  • posiada jeden argument w nawiasie po nazwie, jest to zmienna o nazwie number i jest typu string
  • number.length() zwraca nam długość tekstu (łańcucha znaków) za każdym razem jak wywołujemy funkcję, czyli np. liczba w postaci tekstowej 3,14 zawiera 4 znaki, czyli jej długość to wartość 4, gdy podamy np. 3,14159 mamy 7 znaków itd. (przecinek też liczymy)
  • ponieważ number jest to zmienna typu string, możemy ją "literować" (iterate), wykorzystujemy do tego pętle for (numeracja znaków jest od zera), czyli dla 3,14

    i=0 znak 3    ( number[0]  )
    i=1 znak ,     ( number[1]  )
    i=2 znak 1    ( number[2]  )
    i=3 znak 4    ( number[3]  )
  • if sprawdza czy dany znak to , (przecinek) if (number[i] == ','), jeżeli tak to zamienia go na . (kropkę) number[i] = '.'; ponieważ "szukamy" przecinek dalsze wykonywanie pętli "jest bezcelowe", więc w momencie znalezienia przecinka, zamieniamy go na kropkę i "wychodzimy" z pętli za pomocą break; w ten sposób otrzymujemy zapis 3,14 => 3.14
  • w tym przykładzie funkcja zwraca liczbę typu float, czyli Nasz łańcuch znaków 3.14 za pomocą funkcji stof  return stof(number);

 

przykład1  [ on-line ]

#include <iostream>

using namespace std;

float comma2Dot(string number)
{
    for (int i=0; i<number.length(); i++)
        if (number[i] == ',')
        {
            number[i] = '.';
            break;
        }
    return stof(number);
}

int main()
{
    string number;
    cout << "Podaj liczbę: ";
     cin >> number;
    
    cout << "Twoja liczba to " << comma2Dot(number) << endl;

    return 0;
}

 

przykład2  [ on-line ]

#include <iostream>

using namespace std;

float comma2Dot(string number)
{
    for (int i=0; i<number.length(); i++)
        if (number[i] == ',')
        {
            number[i] = '.';
            break;
        }
    return stof(number);
}

int main()
{
    string number_string;
    cout << "Podaj liczbę: ";
     cin >> number_string;
    
    float number = comma2Dot(number_string);
    cout << "Twoja liczba to " << number << endl;
    cout << "Twoja liczba podniesiona do kwadratu " << (number * number) << endl;

    return 0;
}

 

1
komentarz 28 lutego 2022 przez j23 Mędrzec (194,920 p.)

@Ciawes,  jeśli chcesz, by separator dziesiętny był taki, jaki jest aktualnie w systemie, to daj na początku:

std::setlocale(LC_NUMERIC, "");

 

Podobne pytania

0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 16 lipca 2015 w C i C++ przez Yari27 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,513 wizyt
+2 głosów
1 odpowiedź 87 wizyt
pytanie zadane 17 kwietnia w C i C++ przez polandonion Mądrala (7,040 p.)

92,579 zapytań

141,429 odpowiedzi

319,656 komentarzy

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

...