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 tu comprends comment fonctionnent les chaînes avec le caractère nul de fin, il est temps d’apprendre à récupérer une saisie de chaîne auprès des utilisateurs. La fonction scanf peut lire des chaînes à l’aide du spécificateur de format %s, mais elle présente des limites importantes qu’il faut comprendre.
Pour lire une chaîne de caractères avec scanf, utilise le format %s et passe le nom de ton 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", ...) a une limite importante : il arrête la lecture dès qu’il rencontre un caractère d’espacement (espace, tabulation ou saut de ligne). Cela signifie que si un utilisateur saisit "Hello World", scanf ne récupère que "Hello" et laisse "World" dans le tampon d’entrée.
Un autre problème sérieux 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, ce qui risque de faire planter votre programme ou de créer des failles de sécurité. Assurez-vous toujours que votre tableau de caractères est suffisamment grand pour l’entrée attendue.
Malgré ces limites, scanf("%s", ...) convient parfaitement à la lecture de mots isolés, ce que tu vas précisément pratiquer dans le prochain défi.
Défi
FacileÉcrivez un programme C qui montre comment lire une chaîne saisie par l’utilisateur avec scanf et l’afficher. Votre programme doit :
- Déclarer un tableau de caractères nommé
usernamede 30 éléments pour stocker la saisie de l’utilisateur - Déclarer un tableau de caractères nommé
hobbyde 25 éléments pour stocker une autre saisie - Utiliser
printfpour afficher à l’utilisateur le messageEnter your username: - Utiliser
scanfavec le spécificateur de format%spour lire le nom d’utilisateur dans le tableauusername - Utiliser
printfpour afficher à l’utilisateur le messageEnter your hobby: - Utiliser
scanfavec le spécificateur de format%spour lire le loisir dans le tableauhobby - Afficher les deux chaînes avec
printfdans le format exact indiqué ci-dessous
Les données saisies seront fournies sous la forme de deux mots distincts (sans espaces à l’intérieur de chaque mot).
Votre sortie doit afficher les résultats dans le 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 chaîne saisie, de la déclaration correcte d’un tableau de caractères de taille suffisante et de la combinaison des données saisies par l’utilisateur avec une sortie formatée à l’aide de printf.
Essayez vous-même
#include <stdio.h>
int main() {
// TODO: Déclarez vos tableaux de caractères ici
// TODO: Écrivez votre code ici pour afficher une invite et lire la saisie
// TODO: 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