Tutoriel de programmation en C, partie 5 – Variables de caractères

Dans les deux tutoriels précédents, nous avons abordé les bases des variables, notamment la façon dont elles occupent la mémoire. Mais nous nous sommes surtout concentrés sur les entiers et les flottants. Dans ce tutoriel, nous allons parler des caractères (ou variables de type char).

Les variables de type ‘char’ occupent 1 octet (ou 8 bits) dans la mémoire. Comme je l’ai mentionné précédemment dans le cas des ‘int’ et des ‘float’, tu peux vérifier la quantité de mémoire qu’un caractère occupe sur ton système en utilisant le programme C suivant :

#include <stdio.h>

int main (void)
{
printf("\n sizeof char in bytes is %u", sizeof(char));

return 0;
}

Sur mon système, le résultat était le suivant :

 sizeof char in bytes is 1                                                                                               

Il s’agit maintenant de savoir comment accepter les caractères en entrée de l’utilisateur et comment les imprimer en sortie. Pour accepter les caractères en entrée, il existe une fonction dédiée appelée ‘getchar’. De même, pour imprimer des caractères individuels, tu as ‘putchar’. Le morceau de code suivant devrait te donner une meilleure idée du fonctionnement de ces fonctions :

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
putchar(c);

return 0;
}

Le code ci-dessus, lorsqu’il est exécuté, attend d’abord que l’utilisateur saisisse un caractère. Ensuite, il sort simplement le même caractère sur le terminal.

Tu seras peut-être un peu surpris que la valeur renvoyée par ‘getchar’ soit stockée dans un entier, mais c’est comme ça (la fonction renvoie un entier). Mais tu peux toujours comparer la valeur renvoyée par ‘getchar’ avec un caractère. Voici un exemple :

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
if(c == 'a')
{
printf("matched");
}
else
{
printf ("doesn't match");
}
return 0;
}

Ici, si l’utilisateur saisit ‘a’, le programme imprime ‘apparié’ en sortie. Sinon, tu verras ‘ne correspond pas’.

Oh, et oui, c’est la première fois que nous utilisons les instructions ‘if’ et ‘else’. Comme tu l’auras compris, ‘if’ te permet d’exécuter une série de déclarations si une condition est vraie. Lorsque la condition ‘if’ échoue, l’exécution du code entre automatiquement dans le bloc ‘else’. Remarque : tu peux utiliser une déclaration ‘if’ sans déclaration ‘else’, mais l’inverse n’est pas valable.

Maintenant, pour en revenir à getchar et putchar, voyons rapidement comment ces fonctions peuvent être utilisées pour résoudre des problèmes de la vie réelle. Disons que tu veux compter le nombre de lignes qu’un utilisateur a fournies en entrée de ton programme, tu peux le faire de la façon suivante :

#include <stdio.h>

int main (void)
{
int c =0, counter=0;
c = getchar();
while(c != EOF)
{
c = getchar();
if(c == '\n')
counter = counter+1;
}
printf("\n The input contains %d lines \n", counter+1);
return 0;
}

Pour comprendre le programme ci-dessus, tu dois d’abord savoir ce qu’est EOF. Eh bien, EOF signifie « End Of File » (fin de fichier). Il est utilisé pour signifier que l’utilisateur a fini de saisir ses données.

Donc, lorsque toi, en tant qu’utilisateur fournissant des données, tu as terminé le processus, tu appuies sur ctrl+d (plusieurs fois). C’est cette action qui produit une valeur équivalente à celle de EOF, qui peut être vérifiée dans le programme – comme nous l’avons fait.

En revenant au programme, tu vérifies d’abord le premier caractère de l’entrée pour voir si c’est EOF. Si ce n’est pas le cas, tu entres dans la boucle while et tu vérifies continuellement chaque caractère jusqu’à ce que tu obtiennes un EOF. Pendant tout ce processus, chaque fois que tu obtiens un caractère de nouvelle ligne (\n), tu augmentes la variable ‘counter’.

Après avoir détecté un EOF, la boucle while se termine et nous imprimons le nombre de lignes qui est supérieur à la valeur du compteur.

La raison pour laquelle nous ajoutons un au ‘compteur’ dans la fonction ‘printf’ est que le nombre de lignes est toujours supérieur d’une unité au nombre de caractères de nouvelle ligne (ou en termes simples, le nombre de fois où l’utilisateur a appuyé sur la touche ‘Entrée’). Bien sûr, cela suppose que chaque fois que l’utilisateur appuie sur la touche Entrée, il saisit également du texte.

Donc si tu donnes à ce programme une entrée comme la suivante :

Hello 
Welcome to HowtoForge
Thanks  

La sortie serait la suivante :

The input contains 3 lines

Note que notre code suppose que l’utilisateur fournira au moins une ligne. Quelques cas particuliers ne sont pas gérés intentionnellement pour garder les choses simples. L’un d’eux est lorsque l’utilisateur fournit EOF sans fournir aucun autre caractère en entrée, et l’autre est lorsqu’une ligne a été fournie sans fournir de caractère de nouvelle ligne.

Le calcul du nombre de lignes n’est qu’un exemple. Tu peux aussi étendre ce code pour calculer le nombre total de mots saisis par l’utilisateur. Considère cela comme un devoir et essaie de le coder toi-même. En guise d’astuce, je dirais qu’il faut considérer les espaces (‘ ‘) et les tabulations (‘\t’), de la même manière que nous avons considéré les nouvelles lignes (‘\n’) pour calculer le nombre de lignes.

Conclusion

Dans ce tutoriel, nous avons discuté un peu plus des caractères, notamment comment les utiliser, les accepter en entrée et les imprimer en sortie. Nous avons également discuté d’un exemple où la fonction getchar nous a aidés à calculer le nombre de lignes en entrée. Essaie le devoir que j’ai donné dans le dernier paragraphe et fais-moi savoir si tu as un doute ou une question.

Vous aimerez aussi...