Ayuda para guardar como char o como int

Iniciado por ciquee, 11 Marzo 2019, 14:03 PM

0 Miembros y 1 Visitante están viendo este tema.

ciquee

Hola buenas a todos/as,

Estoy empezando en esto de la programación y haciendo un ejercicio me estoy volviendo loco, y seguro que no será tan difícil... La cuestión es que necesito hacer un programa que pida al usuario un carácter o numero, si es un numero de 1 a 7 diga el día de la semana asociado, y si es un carácter de la A a la G diga el numero que le corresponde, por ejemplo a la b o la B el 2...
Y el problema es que no se como guardar el valor tecleado ya que si es un numero es un int y si es un carácter debe ser un char.


#include <iostream>
using namespace std;

char caracter;

int main(void) {

cout<<"\nEscribe un carácter: "; cin>>caracter;

if (caracter >= 0 && caracter <= 7)
{
if (caracter == 1 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Lunes";
}

else if (caracter == 2 ){
cout<<"El dia de la semana asociado al caracter " <<caracter<< " es el Martes";
}

else if (caracter == 3 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Miercoles";
}

else if (caracter == 4 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Jueves";
}

else if (caracter == 5 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Viernes";
}

else if (caracter == 6 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Sábado";
}

else if (caracter == 7 ){
cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Domingo";
}
}

else if ((caracter >= 'a' && caracter <= 'g') || (caracter >= 'A' && caracter <= 'G'))
{
if (caracter =='a' || caracter == 'A') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 1";
}

if (caracter =='b' || caracter == 'B') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 2";
}

if (caracter =='c' || caracter == 'C') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 3";
}

if (caracter =='d' || caracter == 'D') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 4";
}

if (caracter =='e' || caracter == 'E') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 5";
}

if (caracter =='f' || caracter == 'F') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 6";
}

if (caracter =='g' || caracter == 'G') {
cout<<"El numero asociado al caracter "<<caracter<<" es el 7";
}
}

else {
cout<<"El carater introducido no es un valor alfanumerico aceptado";
}

return 0;
}



Si declaro un char me funciona con los caracteres y si declaro un int me funciona con los números, pero no se como hacer para que me funcione en ambos casos.

¿Alguna ayuda?

Muchas gracias!

CalgaryCorpus

Reemplaza los numeros, en las comparaciones. Usa los caracteres en vez.

if( caracter == 0 )

See transforma en

if( caracter == '0' )

Aqui mi perfil en LinkedIn, invitame un cafe aqui

CalgaryCorpus

Puedes acortar tu programa aprovechando que Las letras son contiguas. Una vez que has detectado que la letra esta entre 'a' y 'g', puedes ver que numero tiene asociado haciendo una operacion:

caracter - 'a' + 1

Esto te da El valor que estas imprimiendo y evitas todos los ifs.

Transforma la letra a minuscula (usando tolower()) para no tener que hacer logica adicional para Las mayusculas.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

CalgaryCorpus

Puedes evitar loa primeros ifs si guardas todos los dias en un arreglo de strings (suponiendo que lo llamas dias) y despues de comprobar que El caracter esta entre '0' y '9' imprimes

dias[caracter - '0']
Aqui mi perfil en LinkedIn, invitame un cafe aqui

dariodr01

Hola, tambien puedes hacerlo con case, te dejo un ejemplo.

Código (cpp) [Seleccionar]
switch(caracter) {
    case '1':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Lunes";
    break;
    case '2':
      cout<<"El dia de la semana asociado al caracter " <<caracter<< " es el Martes";
    break;
    case '3':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Miercoles";
    break;
    case '4':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Jueves";
    break;
    case '5':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Viernes";
    break;
    case '6':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Sábado";
    break;
    case '7':
      cout<<"El dia de la semana asociado al caracter "<<caracter<< " es el Domingo";
    break;
  }

ciquee

Muchísimas gracias CalgaryCorpus, era una tontería pero he estado dándole vueltas más de una hora (bueno, y mas de 2 jajaja).

Gracias también a dariodr01, pero en el ejercicio poner que no podemos utilizar Switch.

Saludos!!