Código:
1:#include <stdio.h>
2:
3:/* Valores distorcidos */
4:// agudo
5:#define D_A_ACUTE -63 // Á
6:#define D_E_ACUTE -55 // É
7:#define D_I_ACUTE -51 // Í
8:#define D_O_ACUTE -45 // Ó
9:#define D_U_ACUTE -38 // Ú
10:#define D_a_ACUTE -31 // á
11:#define D_e_ACUTE -23 // é
12:#define D_i_ACUTE -19 // í
13:#define D_o_ACUTE -13 // ó
14:#define D_u_ACUTE -6 // ú
15:// circunflexo
16:#define D_A_CIRC -62 // Â
17:#define D_E_CIRC -54 // Ê
18:#define D_O_CIRC -44 // Ô
19:#define D_a_CIRC -30 // â
20:#define D_e_CIRC -22 // ê
21:#define D_o_CIRC -12 // ô
22:// grave
23:#define D_A_GRAVE -64 // À
24:#define D_a_GRAVE -32 // à
25:// til
75:/*Função que corrige distorção de caractere constante*/
76:char cc(char c)
77:{
78: switch (c)
79: {
80: case D_A_ACUTE: return R_A_ACUTE; // Á
81: case D_E_ACUTE: return R_E_ACUTE; // É
82: case D_I_ACUTE: return R_I_ACUTE; // Í
83: case D_O_ACUTE: return R_O_ACUTE; // Ó
84: case D_U_ACUTE: return R_U_ACUTE; // Ú
85: case D_a_ACUTE: return R_a_ACUTE; // á
86: case D_e_ACUTE: return R_e_ACUTE; // é
87: case D_i_ACUTE: return R_i_ACUTE; // í
88: case D_o_ACUTE: return R_o_ACUTE; // ó
89: case D_u_ACUTE: return R_u_ACUTE; // ú
90: case D_A_CIRC: return R_A_CIRC; // Â
91: case D_E_CIRC: return R_E_CIRC; // Ê
92: case D_O_CIRC: return R_O_CIRC; // Ô
93: case D_a_CIRC: return R_a_CIRC; // â
94: case D_e_CIRC: return R_e_CIRC; // ê
95: case D_o_CIRC: return R_o_CIRC; // ô
96: case D_A_GRAVE: return R_A_GRAVE; // À
97: case D_a_GRAVE: return R_a_GRAVE; // à
98: case D_A_TILDE: return R_A_TILDE; // Ã
99: case D_O_TILDE: return R_O_TILDE; // Õ
100: case D_N_TILDE: return R_N_TILDE; // Ñ
101: case D_a_TILDE: return R_a_TILDE; // ã
102: case D_o_TILDE: return R_o_TILDE; // õ
103: case D_n_TILDE: return R_n_TILDE; // ñ
104: case D_U_UML: return R_U_UML; // Ü
105: case D_u_UML: return R_u_UML; // ü
106: case D_C_CEDIL: return R_C_CEDIL; // Ç
107: case D_c_CEDIL: return R_c_CEDIL; // ç
108: default: return c;
109: }
110:}
111:
112:int main(void)
113:{
114: int i;
115: char c;
116: char vogal[5] = {'a', 'e', 'i', 'o', 'u'};
117: char agudo[10] = {'Á', 'É', 'Í', 'Ó', 'Ú', 'á', 'é', 'í', 'ó', 'ú'};
118: char circunflexo[6] = {'Â', 'Ê', 'Ô', 'â', 'ê', 'ô'};
119: char grave[2] = {'À', 'à'};
120: char til[6] = {'Ã', 'Õ', 'Ñ', 'ã', 'õ', 'ñ'};
121: char trema[2] = {'Ü', 'ü'};
122: char cedilha[2] = {'Ç', 'ç'};
123:
124: for (i = 0; i < 5; i++)
125: printf("Real:%c Distorcido:%c %3d\n", cc(vogal[i]), vogal[i], vogal[i]);
126: putchar('\n');
127:
128: for (i = 0; i < 10; i++)
129: printf("Real:%c Distorcido:%c %3d\n", cc(agudo[i]), agudo[i], agudo[i]);
130: putchar('\n');
131:
132: for (i = 0; i < 6; i++)
133: printf("Real:%c Distorcido:%c %3d\n", cc(circunflexo[i]), circunflexo[i], circunflexo[i]);
134: putchar('\n');
135:
136: for (i = 0; i < 2; i++)
137: printf("Real:%c Distorcido:%c %3d\n", cc(grave[i]), grave[i], grave[i]);
138: putchar('\n');
139:
140: for (i = 0; i < 6; i++)
141: printf("Real:%c Distorcido:%c %3d\n", cc(til[i]), til[i], til[i]);
142: putchar('\n');
143:
144: for (i = 0; i < 2; i++)
145: printf("Real:%c Distorcido:%c %3d\n", cc(trema[i]), trema[i], trema[i]);
146: putchar('\n');
147:
148: for (i = 0; i < 2; i++)
149: printf("Real:%c Distorcido:%c %3d\n", cc(cedilha[i]), cedilha[i], cedilha[i]);
150: putchar('\n');
151:
152: c = getchar();
153: printf("Lido:%c Real:%c\n", c, cc(c));
154:
155: return 0;
156:}