Problema con ñ,Ñ, y acentos.

Iniciado por diegofah, 1 Septiembre 2014, 08:10 AM

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

diegofah

Buenas a todos, desde ya gracias de antemano, tengo problemas a la hora de imprimir las ñ, Ñ, y letras con acento, el programa tiene hacer lo siguiente:
Al introducir por teclado un texto (minúsculas y mayúsculas con espacios) a la salida debe mostrar su correspondiente en ASCII asociado a su carácter, bueno mejor les dejo un ejemplo:
Entrada         "aDñ s1á!"
Salida            a=97 (Caracter)
                     D=68 (Caracter)
                     ñ=164 (Caracter)
                   " "=32 (Espacio no imprimible)
                     s=115 (Caracter)
                     1=49 (Digito)
                     á=160(Caracter)
                     !=33 (Signo de Puntuacion)

Esa es la idea, y la verdad no se como hacer funcionar la parte de la ñ, y las letras con acento aqui lo que hice hasta ahora:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main ()
{
    char palabra[80];
    int a,i,v;
    printf("Introduzca los caracteres:\n");
    gets(palabra);
    a=strlen(palabra);
    a=a-1;
    for(i=0;i<=a;i++)
    {
        v=palabra[i];
        if((v>=65 & v<=90)||(v>=97 & v<=122))
        {
          printf(" %c = %d \t (Car%ccter)\n", palabra[i],v,160);
        }
        else
        {
            if(v>=48 & v<=57)
            {
                printf(" %c = %d \t (Digito)\n", palabra[i],v);
            }
            else
            {
               if((v==164)||(v==165)||(v==160)||(v==130)||(v==162)||(v==163)||(v==161)||(v==181)||(v==144)||(v==181)||(v==214)||(v==214)||(v==224)||(v==233))
               {
                   printf(" %c = %d \t (Car%ccter)\n", palabra[i],v,160);
               }
               else
               {
                    if((v==63)||(v==64)||(v==168)||(v==173)||(v==33)||(v==58)||(v==47)||(v==92))
                    {
                        printf(" %c = %d \t (Signo de puntuaci%cn)\n", palabra[i],v,162);
                    }
                    else
                    {
                        if((v==32))
                        {
                            printf(" %c = %d \t (Espacio no imprimible)\n", palabra[i],v);
                        }
                        else
                        {
                            printf(" %c = %d \t (Car%ccter no imprimible)\n", palabra[i],v,160);
                        }
                    }
               }

            }

        }
    }
    system ("pause");
}


ecfisa

#2
Hola diegofah.

Si estas trabajando en consola de Windows, intenta de este modo:

Citar
void printUCode(char* str) {
 int i;
 for(i=0; i<strlen(str); i++) {
   switch(str){
     case 'á': printf("\240"); break;
     case 'é': printf("\202"); break;
     case 'í': printf("\241"); break;
     case 'ó': printf("\242"); break;
     case 'ú': printf("\243"); break;
     case 'Á': printf("%c",-75); break;
     case 'É': printf("%c",-112); break;
     case 'Í': printf("%c",-42); break;
     case 'Ó': printf("%c",-32); break;
     case 'Ú': printf("%c",-23); break;
     case 'Ñ': printf("%c",-91); break;
     case 'ñ': printf("%c",-92); break;
     default: printf("%c", str);
   }
 }
}

Uso:
Citar
 printUCode("ÁÉÍÓÚÑáéíóúñ");

(Usé las etiquetas "code" para que se visualizen correctos los caracteres)

Saludos.

ivancea96


ecfisa

Hola ivancea96.

Tenes razón, gracias por la observación. Corrijo:


void printUCode(char* str) {
  int i;
  for(i=0; i<strlen(str); i++) {
    switch(str[i]){
      case 'á': printf("\240"); break;
      case 'é': printf("\202"); break;
      case 'í': printf("\241"); break;
      case 'ó': printf("\242"); break;
      case 'ú': printf("\243"); break;
      case 'Á': printf("%c",-75); break;
      case 'É': printf("%c",-112); break;
      case 'Í': printf("%c",-42); break;
      case 'Ó': printf("%c",-32); break;
      case 'Ú': printf("%c",-23); break;
      case 'Ñ': printf("%c",-91); break;
      case 'ñ': printf("%c",-92); break;
      default: printf("%c", str[i]);
    }
  }
}


Saludos.