- Codice:
int guarda(char a){
int l;
if((a >'0') and (a <= '9')) l=a;
return l;
}
how about this? volevo fare un return l anche prima ma non so perchè ho scritto a.
int guarda(char a){
int l;
if((a >'0') and (a <= '9')) l=a;
return l;
}
int guarda(int c)
{
if(c >= '0' && c <= '9')
return c - '0';
else
return -1;
}
c - '0'
sia uguale alla cifra rappresentata da c
, per essere sicuro di non avere un errore nel codice, sarebbe sufficiente aggiungere uno static_assert:int
guarda(char c)
{
// questo e' un assert a tempo di compilazione
static_assert('1' - '0' == 1 && '2' - '0' == 2 && '3' - '0' == 3
&& '4' - '0' == 4 && '5' - '0' == 5 && '6' - '0' == 6
&& '7' - '0' == 7 && '8' - '0' == 8 && '9' - '0' == 9,
"L'encoding attuale e' incompatibile con la funzione corrente");
if (c >= '0' && c <= '9')
{
return static_cast<int>(c) - static_cast<int>('0');
}
return -1;
}
ctype.h
contiene la funzione isdigit
che permette di vedere se il valore è una cifra. D'altra parte, è possibile che alcuni encoding segnino come digit qualcosa che non è nell'insieme '0123456789'
.In both the source and execution basic character sets, the
value of each character after 0 in the above list of decimal digits shall be one greater than
the value of the previous.
Obidream ha scritto:Da quel che so, sia lo standard del C che del C++ dicono questo:In both the source and execution basic character sets, the
value of each character after 0 in the above list of decimal digits shall be one greater than
the value of the previous.
Per cui quella conversione dovrebbe essere ok a prescindere dalla codifica usata
cooper ha scritto:vi ringrazio per gli interventi che domani mi leggerò con calma.
detto questo, mi sembra strano ci richiedesse una risoluzione di quel tipo per due ragioni: la prima, come detto, è che non abbiamo trattato codice ASCII e quindi per me quei pezzi di codice sono nuovi; la seconda è che è una prova scritta (con carta e penna) e sarebbe impensabile sapere a memoria tutti i codici.
vict85 ha scritto:Il punto del mio messaggio è appunto che non dovresti usare proprietà specifiche dell'ASCII. Come ha detto Obidream la proprietà che usa lui è prevista dallo standard e quindi da tutti i sistemi (o per lo meno da tutti i compilatori).
int c
è lo stesso se passo un char c
, giusto? anche perchè i char in qualche modo comprendono gli int. è giusto perchè nel testo è specificato esattamente che prende in ingresso un char e non un int. l'algoritmo ora mi è chiaro.cooper ha scritto:vict85 ha scritto:Il punto del mio messaggio è appunto che non dovresti usare proprietà specifiche dell'ASCII. Come ha detto Obidream la proprietà che usa lui è prevista dallo standard e quindi da tutti i sistemi (o per lo meno da tutti i compilatori).
non avevo recepito questa cosa.
l'ultimo dubbio e poi credo di essere apposto:
anzichè passare come argomento unint c
è lo stesso se passo unchar c
, giusto? anche perchè i char in qualche modo comprendono gli int. è giusto perchè nel testo è specificato esattamente che prende in ingresso un char e non un int. l'algoritmo ora mi è chiaro.
Visitano il forum: Nessuno e 1 ospite