C ne complique pas la gestion du texte. Il supprime les couches d’abstraction et vous laisse avec la mécanique brute. Si vous avez consulté la documentation C, vous avez probablement remarqué que toutes les fonctions d’entrée/sortie de texte se trouvent dans la bibliothèque stdio. Cela signifie entrée/sortie standard. C’est le fondement de la manière dont les programmes C communiquent avec le monde extérieur.

La plupart des débutants commencent par stdin et stdout. Ce sont des flux standards. Ils représentent l’endroit où un programme obtient les données et où il envoie les résultats. Si votre application n’a besoin que d’une seule source d’entrée et d’un seul récepteur pour la sortie, vous n’avez pas besoin d’une gestion de fichiers complexe. Vous transférez simplement les données via la ligne de commande.

Les six flux de base

L’en-tête stdio fournit six commandes spécifiques pour interagir avec ces flux. Ils sont simples. Direct.

  • printf : écrit le texte formaté sur stdout.
  • scanf : lit les données formatées depuis stdin.
  • puts : affiche une chaîne à l’écran.
  • gets : lit une ligne de texte à partir du clavier.
  • putc : écrit un seul caractère sur stdout.
  • getc ou getchar : lit un seul caractère depuis stdin.

Pourquoi les utiliser ? Parce que vous pouvez les rediriger. C’est là que C brille. Vous n’avez pas besoin de modifier votre code pour lire à partir d’un fichier au lieu d’un clavier. Vous modifiez simplement la commande que vous tapez dans le terminal.

Compter les caractères en toute simplicité

Regardons un exemple pratique. Imaginez que vous souhaitiez un programme qui compte le nombre total de caractères dans une saisie de texte. Voici le code :

Ce code attend une entrée. Vous tapez des lignes. Lorsque vous avez terminé, vous appuyez sur CTRL-D. Cela signale la fin du fichier (eof ). La fonction gets renvoie zéro lorsqu’elle atteint eof, rompant ainsi la boucle. Le décompte final s’imprime à l’écran.

Mais voici l’astuce. Vous n’aviez pas besoin de modifier le code pour compter les caractères dans un fichier. Vous venez d’ajouter une petite instruction au shell.

Redirection des entrées et sorties

Si vous avez compilé ce programme dans un exécutable nommé xxx, vous pouvez lui alimenter un fichier.

Le crochet angulaire redirige le contenu de filename vers stdin. Le programme pense qu’il lit à partir du clavier. Ce n’est pas le cas. Il lit à partir du disque.

Vous pouvez également utiliser des tuyaux. Cela transmet la sortie d’une commande directement dans une autre.

C’est le même résultat. cat vide le fichier sur la sortie standard. Le tube l’envoie à votre programme.

Vous pouvez également rediriger la sortie. Au lieu de voir le décompte sur votre écran, vous pouvez le sauvegarder.

xxx lit désormais filename et écrit le résultat dans un nouveau fichier texte nommé out. C’est puissant. Il vous permet d’enchaîner des outils sans écrire de code supplémentaire pour gérer les pointeurs de fichiers.

Quand les streams ne suffisent pas

Parfois, la redirection ne suffit pas. Vous devrez peut-être ouvrir plusieurs fichiers à la fois. Peut-être que vous créez un éditeur de texte qui enregistre les fichiers de configuration. Peut-être devez-vous vérifier si vous avez atteint la fin d’un fichier sans planter.

Dans ces cas, vous avez besoin de fonctions de fichiers directs. Ceux-ci sont également en stdio, mais ils fonctionnent sur des pointeurs de fichiers plutôt que sur des flux standard.

  • fopen : Ouvre un fichier en lecture ou en écriture.
  • fclose : ferme le fichier lorsque vous avez terminé.
  • feof : Vérifie si vous avez atteint la fin du fichier.
  • fprintf : Écrit les données formatées dans un fichier spécifique.
  • fscanf : lit les données formatées à partir d’un fichier spécifique.
  • fputs : écrit une chaîne dans un fichier.
  • fgets : Lit une ligne d’un fichier.
  • fputc : Écrit un caractère dans un fichier.
  • fgetc : Lit un caractère dans un fichier.

Ces fonctions vous donnent plus de contrôle. Vous pouvez gérer plusieurs flux à la fois. Vous pouvez décider exactement quel fichier reçoit quelles données.

Quel chemin empruntez-vous ? La simplicité de la redirection stdin ou le contrôle des pointeurs de fichiers directs ? Cela dépend de ce que vous construisez. Pour les scripts rapides, la redirection est reine. Pour les applications complexes, vous aurez besoin des fonctions de fichiers.

Il n’y a pas de réponse parfaite. Juste des compromis.