C-SHARP - 2.5 Intéragir avec l'utilisateur
Jusqu'à présent, nous initialisions les variables directement dans le code. Cette fois, l'utilisateur va saisir lui-même les valeurs au clavier, et le programme les stockera dans des variables. Pour commencer, posons une question avec Console.WriteLine, puis lisons la réponse avec Console.ReadLine.
Console.ReadLine — fonction bloquante
Console.ReadLine() attend que l'utilisateur saisisse du texte et appuie sur Entrée. Tant qu'il ne le fait pas, le programme reste figé : on dit que la fonction est bloquante. Particularité importante : ReadLine renvoie toujours une string, même si l'utilisateur tape un nombre. Pour traiter une saisie comme un nombre, il faudra la convertir (sujet de la prochaine vidéo).
Console.WriteLine("Quel est votre prénom ?");
string prenom_utilisateur = Console.ReadLine();
Console.WriteLine("Vous êtes : " + prenom_utilisateur);
Sans la variable prenom_utilisateur, la saisie de l'utilisateur ne serait pas stockée, donc inutilisable. Avec cette structure, après que l'utilisateur tape « Adam », la sortie affiche « Vous êtes : Adam ». Le programme a bien concaténé la chaîne saisie avec « Vous êtes : ».
Le piège des nombres en string
Reprenons l'exemple avec l'année courante : on demande « En quelle année sommes-nous ? » puis on souhaite afficher l'année suivante. Naïvement, on écrit :
Console.WriteLine("En quelle année sommes-nous ?");
string annee = Console.ReadLine();
annee = annee + 1;
Console.WriteLine("L'année prochaine, nous serons en " + annee);
- L'utilisateur tape
2021— maisanneeest unestring - L'expression
annee + 1concatène la chaîne « 2021 » avec le caractère « 1 », ce qui donne « 20211 » au lieu de 2022 - On ne peut pas additionner mathématiquement une string et un nombre
- Il faut convertir la chaîne en
intavant d'effectuer l'opération
C'est exactement le sujet de la prochaine vidéo : la conversion d'un type à un autre, en particulier de string vers int. À très bientôt pour aborder cette notion essentielle.
En résumé
Cette leçon explique comment interagir avec l'utilisateur en C# via la console. Elle montre comment afficher une question avec `Console.WriteLine()` et récupérer l'entrée de l'utilisateur avec `Console.ReadLine()`, une fonction bloquante qui arrête l'exécution du programme en attente de saisie. La vidéo démontre comment stocker les données dans une variable et les afficher, en soulignant que `Console.ReadLine()` retourne toujours une chaîne de caractères, même si l'utilisateur tape un nombre—ce qui crée des pièges lors d'opérations arithmétiques.
Points clés
- Console.WriteLine() affiche du texte et des questions en fenêtre de sortie
- Console.ReadLine() récupère l'entrée utilisateur et bloque l'exécution jusqu'à ce que l'utilisateur appuie sur Entrée
- Les données saisies sont toujours du type string, même si l'utilisateur tape un nombre
- Il faut stocker la saisie dans une variable pour la réutiliser et l'afficher
- Ajouter 1 à une année entrée par l'utilisateur la concatène comme texte au lieu de l'ajouter numériquement—la conversion string→int sera le sujet suivant
Questions fréquentes
Pourquoi ma saisie utilisateur n's'affiche pas après que je la tape?
Parce que vous récupérez la saisie avec Console.ReadLine() mais vous ne la stockez pas dans une variable. Il faut stocker la valeur dans une variable (ex: string prénom = Console.ReadLine();) puis l'afficher avec un deuxième Console.WriteLine().
Que se passe-t-il si je veux ajouter 1 à une année saisie par l'utilisateur?
Comme Console.ReadLine() retourne toujours une string, C# traite l'opération '+' comme une concaténation textuelle plutôt qu'une addition mathématique. Le résultat affiche le nombre suivi de '1' en tant que texte. Il faut convertir la string en int pour faire une vraie addition numérique.
Console.ReadLine() est-elle bloquante?
Oui, Console.ReadLine() arrête l'exécution du programme et attend que l'utilisateur entre des données et appuie sur Entrée avant de continuer.