--- jupytext: text_representation: extension: .md format_name: myst format_version: 0.13 kernelspec: display_name: C++17 language: C++17 name: xcpp17 rise: auto_select: first autolaunch: false centered: false controls: false enable_chalkboard: true height: 100% margin: 0 maxScale: 1 minScale: 1 scroll: true slideNumber: true start_slideshow_at: selected transition: none width: 90% --- +++ {"slideshow": {"slide_type": "note"}} Les semaines précédentes, nous avons vu comment afficher; c'est-à-dire écrire à l'écran au moyen de `cout`. Nous avons occasionnellement vu comment lire depuis le clavier avec `cin`. Nous allons maintenant formaliser cela et introduire la notion de flux qui nous servira ensuite pour lire et écrire dans des fichiers. +++ {"slideshow": {"slide_type": "slide"}} # Notion de flux de données +++ {"slideshow": {"slide_type": "fragment"}} ::::{admonition} Définition Un ***flux sortant*** est un dispositif où l’on peut écrire des données, successivement *l’une après l’autre*. :::{admonition} Syntaxe ``` flux << expression; ``` ::: :::{admonition} Sémantique Écrit la valeur de l'expression dans le flux. La valeur est convertie en texte en fonction de son type. ::: % +++ {"slideshow": {"slide_type": "fragment"}} :::{admonition} Remarque :class: hint On peut enchaîner l'écriture successive de plusieurs expressions : ``` flux << expression1 << expression2 << expression3; ``` ::: :::: +++ {"slideshow": {"slide_type": "fragment"}} :::{admonition} Exemples de flux sortants - `cout` : ***sortie standard*** du programme Typiquement : écran ♣ Avec tampon - `cerr` : ***sortie d’erreur*** du programme ♣ Sans tampon ::: ```{code-cell} --- slideshow: slide_type: fragment --- #include <iostream> using namespace std; cout << "Noël " << 42 << endl; ``` +++ {"slideshow": {"slide_type": "slide"}} ::::{admonition} Définition Un ***flux entrant*** est un dispositif où l’on peut lire des données, successivement *l’une après l’autre*. :::{admonition} Syntaxe ``` flux >> variable; ``` ::: :::{admonition} Sémantique Lit une valeur depuis le flux et l'affecte à la variable. Le type de la variable est utilisé pour déterminer comment lire la variable. ::: % +++ {"slideshow": {"slide_type": "fragment"}} :::{admonition} Remarque :class: hint On peut enchaîner la lecture successive de plusieurs variables : ``` flux >> variable1 >> variable2 >> variable3; ``` ::: :::: +++ {"slideshow": {"slide_type": "fragment"}} :::{admonition} Exemple de flux entrant - `cin` : ***entrée standard*** du programme Typiquement : clavier ::: ```{code-cell} --- slideshow: slide_type: fragment --- string nom; cout << "Comment t'appelles-tu?" << endl; cin >> nom; nom ``` +++ {"slideshow": {"slide_type": "slide"}} :::{admonition} Astuce mnémotechnique :class: hint Le sens des chevrons met en valeur dans quel sens se déplacent les informations : - `flux << expression` : de l'expression vers le flux; - `flux >> variable` : du flux vers la variable. ::: +++ {"slideshow": {"slide_type": "slide"}} :::{admonition} Astuce mnémotechnique :class: hint En anglais, «flux» se dit «*stream*», «entrée» «*input*» et «sortie» «*output*». D'où le nom de la bibliothèque `iostream` qui définit le flux (*stream*) entrant (*i*) `cin` et les flux sortants (*o*) `cout` et `cerr`. :::