1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <stdio.h>
int main(int argc, char *argv[])
{
char const *c; /* Pointeur sur le caractère à afficher */
char const **p; /* Pointeur sur la chaîne de caractères traitée */
for (p = argv + 1; *p != NULL, ++p) {
printf("\"%s\"\n", *p);
for (c = *p; *c != '\0'; ++c) {
if (*c == '\\') /* Séquence d'échappement. On s'intéresse donc au caractère suivant. */
switch (*++c) {
case 'a': /* Alarme */
printf("'\\a': %03u\n", (unsigned char) '\a');
break;
case 'b': /* Retour arrière */
printf("'\\b': %03u\n", (unsigned char) '\b');
break;
case 'f': /* Saut de page */
printf("'\\f': %03u\n", (unsigned char) '\f');
break;
case 'n': /* Nouvelle ligne */
printf("'\\n': %03u\n", (unsigned char) '\n');
break;
case 'r': /* Retour charriot */
printf("'\\r': %03u\n", (unsigned char) '\r');
break;
case 't': /* Tabulation horizontale */
printf("'\\t': %03u\n", (unsigned char) '\t');
break;
case 'v': /* Tabulation verticale */
printf("'\\v': %03u\n", (unsigned char) '\v');
break;
case '\0': /* Le dernier caractère de la chaîne est un '\\' littéral. Ce n'est donc pas une séquence d'échappement. */
--c; /* On met le pointeur à jour pour que la fin de la chaîne soit détectée à la prochaine itération */
case '\\':
printf("'\\\\': %03u\n", (unsigned char) '\\');
break;
default: /* Je ne pense pas avoir oublié de séquence... */
printf("'%c' : %03u\n", *c, (unsigned char) *c);
break;
}
else
printf("'%c' : %03u\n", *c, (unsigned char) *c);
}
putchar('\n');
}
} |
Partager