====== Ecrire et lire des valeurs à partir de la console ====== ===== Utiliser les fonctions C ===== En C, vous avez utilisé la fonction ''printf'' pour écrire des résultats sur le terminal. Pour lire les données à partir du terminal, il est possible d'utiliser la fonction ''scanf''. Il est possible d'utiliser l'ensemble des fonctions C++ en C. Pour ce faire en C, pour pouvoir utiliser ''printf'', il est nécessaire de charger le fichier contenant le prototype de la fonction ''printf'', c'est à dire, d'insérer l'instruction suivante : #include int main() { printf("Le résultat est %d.\n", 3); } En C++, il est préférable de charger l'entête ''cstdio'', le ''c'' devant le ''stdio'' indiquant qu'il s'agit d'un fichier d'entête relative à des fonctions C. #include int main() { printf("Le résultat est %d.\n", 3); } ===== Utiliser les opérateurs C++ ===== C++ offre un ensemble d'objets et d'opérateurs permettant de lire et d'écrire d'une manière totalement homogène dans des flux. Nous verrons plus en avant comment manipuler les flux, définir les méthodes de lectures et d'écritures d'objets complexes dans les flux. Pour l'instant nous nous intéressons uniquement à écrire les valeurs contenues dans des variables sur la console. Pour ce faire, nous devons charger la définition des classes et des opérateurs permettant d'accéder à la console et d'écrire sur un flux ou de lire à partir d'un flux. #include int main() { int value = 3; std::cout "Le résultat est " << value << std::endl; } L'objet ''std::cout'' est un objet qui permet d'accéder à la console en écrire. L'opérateur ''operator <<'' est l'opérateur d'écriture qui transfère la valeur de ''value'' vers l'objet le flux ''std::cout''. Comme la direction est de la variable ou de la chaîne de caractère vers le flux, il s'agit d'une opération d'écriture. Plus spécifiquement, la console défini trois flux : * ''stdout'' le flux d'écriture des messages, * ''stderr'' le flux d'écriture des messages d'erreurs, * ''stdin'' le flux de lecture ==== Les différents objets flux accédant à la console ==== La bibliothèque standard de C++ (STL) définit trois objets permettant d'accéder aux différents flux : * ''std::cout'' accède au flux d'écrire des messages en écriture uniquement, * ''std::cerr'' accède au flux d'écriture des messages d'erreurs en écriture uniquement, * ''std::cin'' accède au flux de lecture des messages en lecture uniquement ==== Afficher la valeur d'une variable ===== Nous pouvons écrire plusieurs contenus à la fois en écrivant ainsi : std::cout << "Les valeurs (x,y) sont " << x // Ecrit le contenu de la variable x << y << std::endl; // Ecrit le contenu de la variable y // ainsi qu’un saut de ligne (std::endl) ==== Afficher un message d'erreur sur le flux ''stderr'' ===== Pour écrire un message d'erreur, la syntaxe est identique : std::cerr << "Une erreur s'est produite et a retourné le message suivant " << anException.message() // Affiche le message d'erreur de l'objet anException << std::endl; // ainsi qu’un saut de ligne (std::endl) ==== Lire une valeur à partir de la console ==== L'opérateur ''operator >>'' est l'opérateur de lecture. Il transfère la valeur du flux vers la variable Comme la direction est de la variable ou de la chaîne de caractère vers le flux, il s'agit d'une opération de lecture. int maxNumberOfIterations; std::cout << "Nombre d'itérations ?"; std::cin >> maxNumberOfIterations; std::cout << "Exécute " << maxNumberOfIterations << " les opérations" << std::endl; Ce code demande à l'utilisateur d'entrer le nombre d'itérations et attend que l'utilisateur fournisse les informations demandées. Les données entrées par l'utilisateur sont converties en un nombre entier et affectées à la variable ''maxNumberOfIterations''. Cependant, il est possible de lire plusieurs variables en une seule opération : int mont, year; std::cout << "Entre le mois et l'année sous la forme 'mm/AA' ?"; std::cin >> month >> "/" >> year; Dans ce cas, il est attendu que l'utilisateur entre une chaîne de caractères de la forme : "09/19" pour septembre 2019 et cette chaine de caractère va être décomposé en trois composantes, une première composante correspondant à "09" suivi d'une composant "/" puis d'une troisième composante composée par "19". La première et la dernière composante seront converties en un nombre entier et affectée respectivement à la variable ''month'' et la variable ''year''.