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

przecinek i kropka w c++

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
1,240 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 (195,240 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 (256,600 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 (256,600 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 (195,240 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ź 270 wizyt
pytanie zadane 16 lipca 2015 w C i C++ przez Yari27 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,770 wizyt
+2 głosów
1 odpowiedź 278 wizyt
pytanie zadane 17 kwietnia 2024 w C i C++ przez polandonion Dyskutant (7,630 p.)

93,442 zapytań

142,433 odpowiedzi

322,685 komentarzy

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

...