Menu
Coddy logo textTech

Saisie de chaînes avec scanf

Fait partie de la section Logic & Flow 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.

challenge icon

Défi

Facile

Écrivez un programme en C qui démontre la lecture d'une entrée de chaîne de caractères de l'utilisateur à l'aide de scanf et son affichage en retour. Votre programme doit :

  1. Déclarer un tableau de caractères nommé username avec 30 éléments pour stocker l'entrée de l'utilisateur
  2. Déclarer un tableau de caractères nommé hobby avec 25 éléments pour stocker une autre entrée
  3. Utiliser printf pour inviter l'utilisateur avec le message "Enter your username:"
  4. Utiliser scanf avec le spécificateur de format %s pour lire le nom d'utilisateur dans le tableau username
  5. Utiliser printf pour inviter l'utilisateur avec le message "Enter your hobby:"
  6. Utiliser scanf avec le spécificateur de format %s pour lire le passe-temps dans le tableau hobby
  7. Afficher les deux chaînes à l'aide de printf dans le format exact indiqué ci-dessous

L'entrée sera fournie sous la forme de deux mots simples distincts (pas d'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 passe-temps, la sortie doit être :

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Ce défi teste votre compréhension de l'utilisation de scanf avec le spécificateur de format %s pour lire une entrée de chaîne, la déclaration correcte d'un tableau de caractères avec une taille suffisante, et la combinaison de l'entrée utilisateur avec une sortie formatée à l'aide de printf.

Aide-mémoire

Pour lire une saisie de chaîne de caractères de la part des utilisateurs, utilisez scanf avec le spécificateur de format %s :

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Limitations importantes de scanf("%s", ...) :

  • S'arrête de lire à n'importe quel caractère d'espacement (espace, tabulation, saut de ligne)
  • Ne capture que des mots simples - "Hello World" devient simplement "Hello"
  • Pas de protection contre le dépassement de tampon - assurez-vous que votre tableau est assez grand
  • N'utilisez pas l'opérateur & avec les noms de tableaux (ce sont déjà des adresses)

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;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logic & Flow