Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jaka biblioteka do if( Key == ',') Key = '.';

Ostatnio zmodyfikowano 2012-11-09 21:48
Autor Wiadomość
zaVIstic
Temat założony przez niniejszego użytkownika
Jaka biblioteka do if( Key == ',') Key = '.';
» 2012-11-09 20:43:53
Cześć. W moim małym programie jedyny problem sprawia fakt, że gdy wpisuje zmiennoprzecinkowa i zamiast kropki użyje przecinka (np. zamiast 1.0 wpisze 1,0) to cały program mi się 'psuje'. Znalazłem gdzieś w necie, że wystarczy
if( Key == ',') Key = '.';
Tak też wpisałem w swój program, ale : " 'key' was not declared in this scope "
Domyślam się, że to przez to, że tej komendy nie ma w jedynej bibliotece jakiej używam, czyli
#include <iostream>
Moje pytanie:
Jakiej biblioteki powinienem użyć? A może są jakieś inne metody, by przecinek zamieniać w kropkę? Z góry dziękuje za pomoc :)
P-68896
Mrovqa
» 2012-11-09 21:13:17
Nie trzeba dodawać żadnej nowej biblioteki, wystarczy zdefiniować zmienną Key:
C/C++
char Key;
cin >> Key;
if( Key == ',' ) Key = '.';

cout << Key;
Widzę, iż jeszcze długa droga przed Tobą.
P-68897
zaVIstic
Temat założony przez niniejszego użytkownika
» 2012-11-09 21:18:43
Sęk w tym, że mój strumień wejściowy (cin) jest typu double, nie  char. Jeśli nie wiesz o co mi chodzi, mogę wstawić kod.

Tak przy okazji.. Co zrobić żeby mi składnie podkreśliło w poniższym kodzie? ... :P

» Kurs STC » Kolorowanie składniKolorowanie składni języka C++ lekcja - xevuel

Dobra zamieszczam kod. Sami możecie sprawdzić co stanie się, jeśli napiszemy np. 0,1 zamiast 0.1 :)
C/C++
/*stworz program ktory dziala jak w automacie ze np
wrzucasz 5 zl cola kosztuje 2 zl i ma ci wydac 3 zl np
automat na napoje mozesz wrzucic dowolna kwote*/


#include <iostream>
#include <stdlib.h>
using namespace std;
double automat( string produkt );
//----------------------
int wybor;
double reszta;
double wynik;
double zlotowki;
static double licznik;
//-----zlotowki
const double z1 = 1.00;
const double z2 = 2.00;
const double z5 = 5.00;
//-----grosze
const double g1 = 0.10;
const double g2 = 0.20;
const double g5 = 0.50;
//-----produkty
string cola( "Cola" );
string fanta( "Fanta" );

//----------------------
int main()
{
    cout << "---AUTOMAT DO NAPOJOW---\n";
    cout << "   ---UWAGA!!!---\nPamietaj, ze wrzucajac grosze wpisujesz kropke, nie przecinek!\nnp. 0.1\n";
    cout << "Przyjmuje nominaly o wartosci: 1zl, 2zl, 5zl, 0.50zl, 0.20zl, 0.10zl\n";
    cout << "-------CENNIK------\n";
    cout << " #1 Cola 2,00zl\n #2 Fanta 5,00zl\n";
    cout << "-------------------\n";
    cout << "Wybierz co chcesz kupic\n";
    cout << "\n #";
    cin >> wybor;
    switch( wybor )
    {
    case 1:
        {
            wynik = 2, 00;
            automat( cola );
            break;
        }
    case 2:
        {
            wynik = 5, 00;
            automat( fanta );
            break;
        }
        default:
        {
            cout << "Nie ma produktu o takim numerze!!!";
        }
    }
    system( "pause" );
}
//***************************************

double automat( string produkt )
{
    cout << "Wrzuc pieniadze ( W zlotowkach!\n [ 10 groszy = 0.1 ] ): ";
    do
    {
        cin >> zlotowki;
        if( zlotowki == ',' ) zlotowki = '.';
       
        if( zlotowki != z1 && zlotowki != z2 && zlotowki != z5 && zlotowki != g1 && zlotowki != g2 && zlotowki != g5 )
        {
            cout << "Takich wartosci nie przyjmujemy!\n";
           
            continue;
        }
        else
        {
            licznik = licznik + zlotowki;
            cout << "Wrzuciles juz: " << licznik << "zl" << endl;
        }
    }
    while( licznik != wynik && licznik < wynik );
   
    if( licznik == wynik )
    {
        cout << "Prosze bardzo, oto Twoja " << produkt << endl;
    }
    else if( licznik > wynik )
    {
        reszta = licznik - wynik;
        cout << "Prosze bardzo, oto Twoja " << produkt << endl;
        cout << "Oddaje reszte: " << reszta << "zl.";
    }
   
}

//***************************************
P-68898
cyklopek11
» 2012-11-09 21:31:53
A taki motyw. Więc w kodzie zmienne zmiennoprzecinkowe musisz pisać z kropką - nic nie poradzisz na to. Ale żeby wprowadzać do strumienia liczby zmiennoprzecinkowe z kropką lub z przecinkiem to możesz:
C/C++
std::string zlotowki;



...dalej w main
cin >> zlotowki;

i napisze sobie funkcję która będzie przerabiać std::string na double akceptując zarówno przecinek jak i kropkę jako znak dziesiętny to uzyskasz dokładnie to co chcesz :-)
P-68899
zaVIstic
Temat założony przez niniejszego użytkownika
» 2012-11-09 21:36:41
Nie, nie o to chodzi..
Zauważ - w moim programie jest moment w którym 'wrzucasz monetę'

       
cin >> zlotowki;

gdzie zlotowki są typu double

      
double zlotowki;

zeby więc uzyskać grosze muszę wpisać 0.1 jeśli natomiast ktoś się pomyli i wpiszę 0,1 to sam zobacz co się dzieje :

http://photoupload.pl/RuY

Teraz rozumiesz? Co z tym zrobic?

Nie chodzi o mnie, tylko o to, żeby program zawsze dobrze działał :).. Jeśli ktoś przez niewiedzę by wpisał , zamiast . to chciałem, żeby program sam go poprawił i zamienił , na .
No to jak się nie da no to nie ma rady, pozostaje więc ostrzeżenie C stringiem, zeby uzywac kropek!
Dzięki za wszystko, pozdrawiam! :)
Aha i tak.. jeszcze długa droga przede mną, wiem.

Dobra, dzięki wszystkim, zamykam! :)
Cyklopek - na pewno spróbuje to zrobić tak jak mówisz, dzięki wielkie :)
P-68900
Mrovqa
» 2012-11-09 21:45:31
Jeśli jednak tak się nie da, no to trudno :)
Napisać da się wszystko, takie sprawdzanie też. W Twoim przypadku nie byłoby wygodniej przy wpisywaniu liczby napisać odpowiednią adnotację dla użytkownika?
P-68901
zaVIstic
Temat założony przez niniejszego użytkownika
» 2012-11-09 21:46:50
Takowa adnotacja była tam od początku ;).. Po prostu zastanawiałem się, czy na moim poziomie da się coś z tym zrobić. Spokojnie :)
P-68902
cyklopek11
» 2012-11-09 21:48:37
Jeśli napiszesz tak:
C/C++
std::string zlotowki;

...dalej w main
cin >> zlotowki;
i napisze sobie funkcję która będzie przerabiać std::string na double akceptując zarówno przecinek jak i kropkę jako znak dziesiętny to uzyskasz dokładnie to co chcesz :-)
P-68903
« 1 »
  Strona 1 z 1