Ostatnio postanowiłem napisać sobie prosty program zamieniający liczby podane przez użytkownika na złote. Ustawiłem wszystko tak jak chciałem program działa w większości przypadków gdy podaje liczbę 23 wyświetla 23 zł itp. Gdy podam jakąś literę wtedy program wraca na początek, ale gdy podam coś w stylu "2s2" program wyświetla to jako "2s2 zł". Chciałbym aby jedynym akceptowanym znakiem przez program oprócz cyfr była kropka.
#include <iostream>
using namespace std;
void pieniadze(string lancuch); //prototyp funkcji
int main()
{
bool dalej;
dalej = true;
do
{
cin.clear();
cin.sync();
string napis;
cout << "Podaj liczbe ktora mam zamienic na PLN ";
getline(cin,napis);
int dlugosc;
dlugosc = napis.length();
for (int i=0; i<dlugosc; i++)
{
if (napis[i]<45||napis[i]==46||napis[i]==47||napis[i]>57)
dalej = false;
else
dalej = true;
}
if (dalej==true)
pieniadze(napis);
}
while(dalej==false);
return 0;
}
void pieniadze(string lancuch)
{
char kropka = '.';
size_t szukaj = lancuch.find(kropka);
if (szukaj!=string::npos)
{
string zlote = lancuch.substr(0,szukaj);
lancuch.erase(0,szukaj+1);
int dlugosc_lancucha = lancuch.length();
if (dlugosc_lancucha>2)
lancuch.erase(2,dlugosc_lancucha-2);
else if (dlugosc_lancucha==1)
lancuch.insert(0,"0");
cout << zlote << " zl " << lancuch << " gr";
}
else
cout << lancuch << " zl";
}