Sto esaminando la seguente porzione di codice C++ riportata su un testo di studio:
int base, ris, cifra;
char c;
cout << "scrivi la base del numero";
cin >> base;
cout << "scrivi il numero in base " << base;
cin >> c;
ris = 0;
cifra = c - '0';
while (cifra>=0 && cifra<base)
{
ris=ris*base+cifra;
cin.get(c);
cifra = c -c'0';
}
In sostanza dato il numero X in base Y si converte X dalla base Y alla base 10.
Ciò che non capisco è l'input del numero, perché secondo voi è stata utilizzata l'istruzione cin>>c e successivamente cin.get(c) ? Che senso ha?
La funzione 'cin >> c', se non capisco male, ignora gli spazi e restituisce il primo carattere digitato poiché 'c' è di tipo char.
Nel caso il primo carattere digitato fosse un valore numerico esterno all'intervallo 0 e 'base' il ciclo while non verrebbe mai eseguito, mentre se lo fosse verrebbe invocata la cin.get(c) fin quando la cifra immessa non sarà esterna all'intervallo.
Se base fosse 6 e volessi digitare il valore 1234 dovrei inserire 1 (invio), 2 (invio), 3 (invio), 4 (invio) ? Corretto?
Non avrei potuto costruire un ciclo con solo cin.get(c) dove controllavo