Tenga en cuenta que NO estoy tratando de distinguir entre un solo dígito y una letra (u otro carácter) como lo hacen funciones como isalpha () en ctype.h

Estoy tratando de distinguir entre un número entero y un alfabeto.

El problema es que un alfabeto también se trata como un número entero en C y no puedo pensar en una salida.

Por ejemplo: si la entrada es la letra a, es lo mismo que 'a', que es el entero 97.

Y necesito encontrar si 'a' o 97 fue la entrada.

Traté de hacer esto y me di cuenta de que simplemente no podía funcionar.

int a;
scanf("%d", &a);
if( (a>='A' && a<='Z') || (a>='a' && a<='z') )
{
   printf("\nAlphabet");
}
1
J...S 24 ago. 2016 a las 12:08

1 respuesta

La mejor respuesta

Verifique el valor de retorno de scanf()

int val;
int chk = sscanf("a", "%d", &val);
if (chk == 1) /* all ok */;
if (chk == 0) /* no assignments */;
if (chk == EOF) /* error */;

O

int val;
int chk = sscanf("97", "%d", &val);
if (chk == 1) /* all ok */;
if (chk == 0) /* no assignments */;
if (chk == EOF) /* error */;

O

int val1, val2, val3;
int chk = sscanf("97 b 99", "%d%d%d", &val1, &val2, &val3);
if (chk == 3) /* all ok */;
if (chk == 2) /* only val1 and val2 were assigned a value */;
if (chk == 1) /* only val1 was assigned a value */;
if (chk == 0) /* no assignments */;
if (chk == EOF) /* error */;
2
pmg 24 ago. 2016 a las 09:31