[C] Itipi di base
buongiorno a tutti..
Sono un pò di giorni che provo a risolvere questo problema senza successo.
Preciso subito che sono un autodidatta!!!
Il testo del problema è questo:
Scrivere un programma che traduca un numero telefonico alfabetico nella sua forma numerica.
Esempio:
Inserisci numero in lettere: CALLATT
numero convertito: 2255288
Io ho iniziato con un programma con solo tre lettere alfabetiche, ma vengono solo le ultime 2 lettere convertite correttamente, al contrario la prima lettera viene restituita al valore ASCII corrispondente.
Non riesco davvero a capire dove sbaglio.
questo è il mio programma(grazie in anticipo per l'aiuto)
Sono un pò di giorni che provo a risolvere questo problema senza successo.
Preciso subito che sono un autodidatta!!!
Il testo del problema è questo:
Scrivere un programma che traduca un numero telefonico alfabetico nella sua forma numerica.
Esempio:
Inserisci numero in lettere: CALLATT
numero convertito: 2255288
Io ho iniziato con un programma con solo tre lettere alfabetiche, ma vengono solo le ultime 2 lettere convertite correttamente, al contrario la prima lettera viene restituita al valore ASCII corrispondente.
Non riesco davvero a capire dove sbaglio.
questo è il mio programma(grazie in anticipo per l'aiuto)
#include <stdio.h>
int main(void)
{
char a,b,c;
int n=2,l=3,m=4;
printf("inserisci il testo: ");
a=getchar();
b=getchar();
c=getchar();
putchar(a);
putchar(b);
putchar(c);
while(getchar()!='\n')
switch(a){
case'a': case'b': case'c':
a=n;break;
case'd': case'e': case'f':
a=l;break;
case'i': case'g': case'h':
a=m;break;}
switch(b){
case'a': case'b': case'c':
b=n;break;
case'd': case'e': case'f':
b=l;break;
case'g': case'h': case'i':
b=m;break;}
switch(c){
case'a': case'b': case'c':
c=n;break;
case'd': case'e': case'f':
c=l;break;
case'g': case'h': case'i':
c=m;break;}
printf("%d%d%d", a,b,c);
return 0;
}
Risposte
#include <stdio.h>
int convertToNumber(char letter);
int main(void)
{
int c;
char tmp;
printf("inserisci il testo lettera per lettera: ");
while(tmp !='\n')
{
tmp = getchar();
c = convertToNumber(tmp);
printf("%d",c);
}
return 0;
}
int convertToNumber(char letter) {
int num;
if (letter >= 'A' && letter <= 'Z')
num = letter - 'A';
else if (letter >= 'a' && letter <= 'z')
num = letter - 'a';
return num;
}
Risultato:
$ ./test inserisci il testo lettera per lettera: aAbBcC 0011220%
Praticamente con -a o -A trovi il valore ASCII della lettera e fai partire il conto da 0
grazie mille per l'aiuto!!!!!