[przyp. kq: ta pierwsza rada jest średnio trafiona]
Można to zrobić za pomocą funkcji isdigit
z biblioteki cctype
. Poniżej znajduje się przykładowy kod:
#include <iostream>
#include <cctype> // dodajemy bibliotekę cctype
using namespace std;
int main()
{
int cyfra;
cout << "Podaj dowolna cyfre:" << endl;
cin >> cyfra;
// sprawdzamy, czy wartość podana przez użytkownika jest cyfrą
if (!isdigit(cyfra))
{
cout << "Nie podano cyfry!";
return 0; // kończymy działanie programu
}
// w przeciwnym wypadku konwertujemy cyfrę na typ int
cyfra = int(cyfra - '0');
// i wykonujemy resztę programu
switch(cyfra)
{
case 0:
cout <<"zero";
break;
case 1:
cout <<"jeden";
break;
case 2:
cout <<"dwa";
break;
case 3:
cout <<"trzy";
break;
case 4:
cout <<"cztery";
break;
case 5:
cout <<"piec";
break;
case 6:
cout <<"szesc";
break;
case 7:
cout <<"siedem";
break;
case 8:
cout <<"osiem";
break;
case 9:
cout <<"dziewiec";
break;
default:
cout << "Nie podano cyfry!";
}
return 0;
}
W pierwszym kroku sprawdzamy, czy wartość podana przez użytkownika jest cyfrą. Jeśli nie jest, kończymy działanie programu. W przeciwnym wypadku konwertujemy wartość na typ int i wykonujemy resztę programu.
W tym kodzie można by zrobić kilka rzeczy, które mogą poprawić jego czytelność i efektywność. Oto kilka sugestii:
- Zamiast tworzyć duży switch, lepiej byłoby stworzyć tablicę, w której przechowywać będziemy nazwy liczb. Następnie, zamiast sprawdzać każdą liczbę w switch, wystarczy sprawdzić, czy podana wartość jest z zakresu 0-9, a następnie wydrukować odpowiednią wartość z tablicy.
- Użycie using namespace std; jest niezalecane, ponieważ może prowadzić do konfliktów nazw (np. gdy dwie różne biblioteki zawierają element o tej samej nazwie). Zamiast tego należy używać pełnych nazw klas i funkcji, np. std::cout zamiast po prostu cout.
- Kompilator może mieć problemy z rozpoznaniem typu zmiennej cyfra, ponieważ jest ona inicjalizowana wartością z cin, która zwraca typ istream&. Aby uniknąć tego problemu, warto zadeklarować zmienną cyfra jako typ char i konwertować ją na int za pomocą funkcji isdigit (patrz poprzedni przykład).
Oto przykładowy kod, w którym wykorzystano wszystkie powyższe sugestie:
#include <iostream>
#include <cctype> // dodajemy bibliotekę cctype
int main()
{
// deklarujemy zmienną cyfra jako typ char
char cyfra;
// tworzymy tablicę z nazwami liczb
const std::string liczby[10] = {"zero", "jeden", "dwa", "trzy", "cztery",
"piec", "szesc", "siedem", "osiem", "dziewiec"};
std::cout << "Podaj dowolna cyfre:" << std::endl;
std::cin >> cyfra;
// sprawdzamy, czy wartość podana przez użytkownika jest cyfrą
if (!isdigit(cyfra))
{
std::cout << "Nie podano cyfry!" << std::endl;
return 0; // kończymy działanie programu
}
// w przeciwnym wypadku konwertujemy cyfrę na typ int
int cyfra_int = int(cyfra - '0');
// i wydrukowujemy odpowiednią nazwę liczby z tablicy
std::cout << liczby[cyfra_int] << std::endl;
return 0;
}
// odpowiedź w całości wygenerowana za pomocą ChatGPT