GNU/Linux >> Tutoriels Linux >  >> Linux

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, y compris la manière dont elles occupent la mémoire. Mais nous nous sommes principalement concentrés sur les entiers et les flottants. Dans ce tutoriel, nous aborderons les caractères (ou les variables de type char).

Les variables de type 'char' occupent 1 octet (ou 8 bits) en mémoire. Comme je l'ai mentionné plus tôt dans le cas de 'int' et 'float', vous pouvez vérifier la quantité de mémoire qu'un caractère occupe sur votre 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, voici le résultat :

 sizeof char in bytes is 1                                                                                               

Vient maintenant la question de savoir comment accepter les caractères en entrée de l'utilisateur et comment les imprimer en sortie. Eh bien, pour accepter des caractères en entrée, il existe une fonction dédiée nommée 'getchar'. De même, pour imprimer des caractères individuels, vous avez 'putchar'. Le morceau de code suivant devrait vous 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. Après cela, il affiche simplement le même caractère sur le terminal.

Il pourrait être un peu surprenant pour vous que la valeur renvoyée par "getchar" soit stockée dans un entier, mais c'est comme ça (la fonction renvoie un int). Mais vous pouvez 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;
}

Donc ici, si l'utilisateur entre 'a', alors le programme imprime 'matched' dans la sortie. Sinon, vous pouvez voir "ne correspond pas".

Oh, et oui, c'est la première fois que nous utilisons les instructions 'if' et 'else'. Comme vous l'avez compris maintenant, 'if' vous permet d'exécuter un ensemble d'instructions si une condition est vraie. Lorsque la condition 'if' échoue, l'exécution du code entre automatiquement dans le bloc 'else'. Notez que vous pouvez utiliser une instruction 'if' sans et 'else', mais l'inverse n'est pas valide.

Maintenant, pour en revenir à getchar et putchar, discutons rapidement de la manière dont ces fonctions peuvent être utilisées pour résoudre des problèmes réels. Supposons que vous souhaitiez compter le nombre de lignes fournies par un utilisateur en entrée de votre programme, vous pouvez le faire de la manière 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, vous devez d'abord savoir ce qu'est EOF. Eh bien, EOF signifie End Of File. Il est utilisé pour signifier que l'utilisateur a terminé sa saisie.

Ainsi, lorsque vous, en tant qu'utilisateur fournissant une entrée, avez terminé le processus, vous appuyez 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, vous vérifiez d'abord le premier caractère d'entrée pour voir s'il s'agit d'EOF. Si ce n'est pas le cas, vous entrez dans la boucle while et vérifiez continuellement chaque caractère jusqu'à ce que vous obteniez un EOF. Pendant tout ce processus, chaque fois que vous obtenez un caractère de nouvelle ligne (\n), vous augmentez la variable 'counter'.

Après qu'EOF soit détecté, la boucle while est terminée et nous imprimons le nombre de lignes, dont une de plus que la valeur du compteur.

La raison pour laquelle nous ajoutons un à 'counter' dans la fonction 'printf' est que le nombre de lignes est toujours un de plus que le nombre de caractères de nouvelle ligne (ou en termes simples, le nombre de fois que l'utilisateur a appuyé sur la touche 'Entrée'). Bien sûr, cela suppose que chaque fois que l'utilisateur appuie sur Entrée, il saisit également du texte.

Donc, si vous donnez à ce programme une entrée comme celle-ci :

Hello 
Welcome to HowtoForge
Thanks  

Le résultat serait :

The input contains 3 lines

Notez que notre code suppose que l'utilisateur fournira au moins une ligne. Quelques cas d'angle ne sont pas manipulés intentionnellement pour garder les choses simples. L'un est lorsque l'utilisateur fournit EOF sans fournir d'autre caractère en entrée, et l'autre 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. Vous pouvez également étendre ce code pour calculer le nombre total de mots saisis par l'utilisateur. Considérez cela comme un devoir et essayez de le coder vous-même. À titre indicatif, je dirais de considérer les espaces (' ') et les tabulations ('\t'), de la même manière que nous avons considéré les sauts de ligne ('\n') pour calculer le nombre de lignes.

Dans ce didacticiel, nous avons discuté un peu plus des caractères, y compris 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. Essayez le devoir que j'ai donné dans le dernier paragraphe et faites-moi savoir si vous avez des doutes ou des questions.


Linux
  1. Tutoriel de programmation en C 4 - Variables et mémoire

  2. Tutoriel de programmation en C Partie 3 - Notions de base sur les variables

  3. Tutoriel de programmation Linux C Partie 10 - Portées variables

  4. Tutoriel de programmation Linux C Partie 9 :Chaînes

  5. Tutoriel de programmation Linux C Partie 8 - Appel par valeur Vs Appel par pointeur/adresse

Shell Scripting Partie 2 :Acceptation des entrées et exécution de l'arithmétique Shell

Comment :Introduction à la programmation - Variables, types et manipulation de données

Tutoriel Awk :Comprendre les variables Awk avec 3 exemples pratiques

Tutoriel sur les variables Bash - 6 exemples pratiques de variables globales et locales Bash

Expressions régulières dans la commande Grep avec 10 exemples - Partie I

Meilleures pratiques de codage pour la programmation système Linux en langage C - Partie 1