Menu
CoddyTech

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.

challenge icon

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 :

  1. Déclarer un tableau de caractères nommé username de 30 éléments pour stocker la saisie de l’utilisateur
  2. Déclarer un tableau de caractères nommé hobby de 25 éléments pour stocker une autre saisie
  3. Utiliser printf pour afficher à l’utilisateur 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 afficher à l’utilisateur le message Enter your hobby:
  6. Utiliser scanf avec le spécificateur de format %s pour lire le loisir dans le tableau hobby
  7. Afficher les deux chaînes avec printf dans 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;
}
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 Logique & Flux

Entraînez-vous par vous-même : Compilateur C en ligne