Saisie de chaînes avec scanf
Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 14 sur 63.
Maintenant que vous comprenez comment les chaînes de caractères fonctionnent avec le caractère de fin de chaîne (null terminator), il est temps d'apprendre comment obtenir une saisie de chaîne de la part des utilisateurs. La fonction scanf peut lire des chaînes en utilisant le spécificateur de format %s, mais elle comporte des limitations importantes que vous devez comprendre.
Pour lire une chaîne de caractères avec scanf, vous utilisez le format %s et passez le nom de votre tableau de caractères (sans l'opérateur &, car les noms de tableaux sont déjà des adresses) :
char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);Cependant, scanf("%s", ...) présente une limitation critique : il s'arrête de lire dès qu'il rencontre un caractère d'espacement (espace, tabulation ou saut de ligne). Cela signifie que si un utilisateur tape "Hello World", scanf ne capturera que "Hello" et laissera "World" dans le tampon d'entrée.
Une autre préoccupation sérieuse est que scanf ne vérifie pas si l'entrée tient dans votre tableau. Si quelqu'un saisit un mot plus long que ce que votre tableau peut contenir, cela provoquera un dépassement de tampon (buffer overflow), risquant de faire planter votre programme ou de créer des vulnérabilités de sécurité. Assurez-vous toujours que votre tableau de caractères est assez grand pour l'entrée attendue.
Malgré ces limitations, scanf("%s", ...) est parfaitement adapté à la lecture de mots simples, ce qui est exactement ce que vous allez pratiquer dans le prochain défi.
Défi
FacileÉcrivez un programme C qui montre comment lire une chaîne saisie par l’utilisateur à l’aide de scanf et l’afficher. Votre programme doit :
- Déclarer un tableau de caractères nommé
usernamecomportant 30 éléments pour stocker la saisie de l’utilisateur - Déclarer un tableau de caractères nommé
hobbycomportant 25 éléments pour stocker une autre saisie - Utiliser
printfpour inviter l’utilisateur à saisir le message « Entrez votre nom d’utilisateur : » - Utiliser
scanfavec le spécificateur de format%spour lire le nom d’utilisateur dans le tableauusername - Utiliser
printfpour inviter l’utilisateur à saisir le message « Entrez votre loisir : » - Utiliser
scanfavec le spécificateur de format%spour lire le loisir dans le tableauhobby - Afficher les deux chaînes à l’aide de
printf, exactement dans le format indiqué ci-dessous
La saisie sera fournie sous la forme de deux mots distincts (sans espaces à l’intérieur de chaque mot).
Votre sortie doit afficher les résultats au format suivant :
Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!Par exemple, si l’utilisateur saisit « Alice » comme nom d’utilisateur et « reading » comme loisir, la sortie doit être :
Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!Ce défi évalue votre compréhension de l’utilisation de scanf avec le spécificateur de format %s pour lire une saisie de type chaîne, de la déclaration correcte d’un tableau de caractères de taille suffisante et de la combinaison d’une saisie utilisateur avec une sortie formatée à l’aide de printf.
Essayez vous-même
#include <stdio.h>
int main() {
// À FAIRE : Déclarez vos tableaux de caractères ici
// À FAIRE : Écrivez votre code ici pour demander et lire l'entrée
// À FAIRE : Affichez le message de sortie final
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînesEntraînez-vous par vous-même : Compilateur C en ligne