• 20 hours
  • Easy

Free online content available in this course.

Paperback available in this course

course.header.alt.is_certifying

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 11/28/19

Lisez le clavier dans la console

Log in or subscribe for free to enjoy all this course has to offer!

Nous avons beaucoup écrit avec Console.WriteLine(), maintenant il est temps de savoir lire. En l'occurrence, il faut être capable de récupérer ce que l'utilisateur a saisi au clavier. 
En effet, un programme qui n'a pas d'interaction avec l'utilisateur, ce n'est pas vraiment intéressant. Vous imaginez un jeu où on ne fait que regarder ? Ça s'appelle une vidéo, c'est intéressant aussi, mais ce n'est pas pareil !

Aujourd'hui, il existe beaucoup d'interfaces de communication que l'on peut utiliser sur un ordinateur (clavier, souris, doigts, manettes,…). Dans ce chapitre nous allons regarder comment savoir ce que l'utilisateur a saisi au clavier dans une application console.

Lire une phrase

Lorsque nous lui en donnerons la possibilité, l'utilisateur de notre programme pourra saisir des choses grâce à son clavier. Nous pouvons lui demander son âge, s'il veut terminer notre application, lui permettre de saisir un mail, etc.

Il nous faut donc un moyen lui permettant de saisir des caractères en tapant sur son clavier. Nous pourrons faire cela grâce à la méthode Console.ReadLine:

string saisie = Console.ReadLine();

Lorsque notre application rencontre cette instruction, elle se met en pause et attend une saisie de la part de l’utilisateur. La saisie s’arrête lorsque l’utilisateur valide ce qu’il a écrit avec la touche entrée. Ainsi les instructions suivantes :

Console.WriteLine("Veuillez saisir une phrase et valider avec la touche \"Entrée\"");
string saisie = Console.ReadLine();
Console.WriteLine("Vous avez saisi : " + saisie);

produiront :

Image utilisateur

Vous aurez remarqué que nous stockons le résultat de la saisie dans une variable de type chaine de caractères. C’est bien souvent le seul type que nous aurons à notre disposition lors des saisies utilisateurs. Cela veut bien sûr dire que si vous avez besoin de manipuler l’âge de la personne, il faudra la convertir en entier. Par exemple :

bool ageIsValid = false;
int age = -1;
while (!ageIsValid)
{
    Console.WriteLine("Veuillez saisir votre age");
    string saisie = Console.ReadLine();
    if (int.TryParse(saisie, out age))
        ageIsValid = true;
    else
    {
        ageIsValid = false;
        Console.WriteLine("L'age que vous avez saisi est incorrect ...");
    }
}
Console.WriteLine("Votre âge est de : " + age);

Et nous aurons :

Image utilisateur

Ce code est facile à comprendre maintenant que vous maitrisez les boucles et les conditions.
Nous commençons par initialiser nos variables. Ensuite, nous demandons à l’utilisateur de saisir son âge. Nous tentons de le convertir en entier, si cela fonctionne on pourra passer à la suite, sinon, tant que l’âge n’est pas valide, nous recommençons la boucle.

Lire un caractère

Il peut arriver que nous ayons besoin de ne saisir qu’un seul caractère, pour cela nous allons pouvoir utiliser la méthode Console.ReadKey().
Nous pourrons nous en servir par exemple pour faire une pause dans notre application. Le code suivant réclame l’attention de l’utilisateur avant de démarrer un calcul hautement important :

Console.WriteLine("Veuillez appuyer sur une touche pour démarrer le calcul ...");
Console.ReadKey(true);
int somme = 0;
for (int i = 0; i < 100; i++)
{
    somme += i;
}
Console.WriteLine(somme);

Ce qui nous donnera :

Image utilisateur

À noter que nous avons passé true en paramètre de la méthode afin d’indiquer au C# que nous ne souhaitions pas que notre saisie apparaisse à l’écran. Si le paramètre avait été false et que j’avais par exemple appuyé sur h pour démarrer le calcul, le résultat se serait vu précédé d’un disgracieux « h » …

D’ailleurs, comment faire pour savoir quelle touche a été saisie ?

Il suffit d’observer le contenu de la variable renvoyée par la méthode Console.ReadKey. Elle renvoie en l’occurrence une variable du type ConsoleKeyInfo. Nous pourrons comparer la valeur « Key » de cette variable qui est une énumération du type ConsoleKey. Par exemple :

Console.WriteLine("Voulez-vous continuer (O/N) ?");
ConsoleKeyInfo saisie = Console.ReadKey(true);
if (saisie.Key == ConsoleKey.O)
{
    Console.WriteLine("On continue ...");
}
else
{
    Console.WriteLine("On s'arrête ...");
}

Nous remarquons grâce à la complétion automatique que l’énumération ConsoleKey possède plein de valeur :

Image utilisateur

Nous comparons donc à la valeur ConsoleKey.O qui représente la touche o.

À noter que le type « ConsoleKeyInfo» est ce qu’on appelle une structure et que Key est une propriété de la structure. Nous reviendrons dans un prochain cours sur ce que cela veut vraiment dire. Pour l’instant, considérez juste qu’il s’agit d’une variable évoluée qui permet de contenir plusieurs choses…

En résumé
  • La méthode Console.ReadLine nous permet de lire des informations saisies par l'utilisateur au clavier.

  • Il est possible de lire toute une phrase terminée par la touche Entrée ou seulement un unique caractère.

Example of certificate of achievement
Example of certificate of achievement