Das funktioniert natürlich nur bei einstelligen Zahlen.
Das Entgegennehmen von chars würde in dem fall eigentlich nur Sinn machen, wenn du noch weitere Eingaben, wie z.b. q für Quit auswertest.
Wenn du das aber nicht willst kannst du auch gleich ein Integer entgegen nehmen und dir das ganze Umrechnen sparen. Dann gibts auch keine Probleme mit mehrstelligen Zahlen.
Willst du beides, also Quit und mehrstellige Zahlen musst du einen String(also ein chararray oder, wenn du ihn schon kennst, std::string) entgegen nehmen und je nach Inhalt anders reagieren. Ist das erste Zeichen im String eine Ziffer wandelst du ihn in ein int um. Um einen String in einen Integer zu konvertieren solltest du aber
std::atoi benutzen. Ist es aber ein Buchstabe wie z.b. q, beendest du das Programm oder ähnliches.
Achja, versuch dir C++-Casts anzugewöhnen. Die gibt es nicht ohne Grund.
Heißt also, wenn ich einen char in eine int konvertiere, muss ich immer mit '0' oder 48 subtrahieren, richtig?
Nur wenn der Char eine Ziffer ist. Wenn du z.b. A ein gibst kommt natürlich blödsinn raus.
In dem Code sieht man aber, dass du ein gutes Grundverständniss bzw. Potenzial hast. Viele Anfänger haben Probleme mit der Gewinnbedingung oder der Programmsteuerung. Deine Fehler zeugen, soweit ich das einschätzen kann, weniger von fehlenden logischen Verständniss als von zu fehlender Übung. Bleib also am Ball!