Écriture/lecture sur l’entrée/sortie standard
Rappel sur les fonction printf
et scanf
du C
printf
et scanf
sont deux fonctions de la bibliothèque standard du langage
C. Déclarée dans l’entête <stdio.h>
, printf
permet l’affichage d’une chaîne
de caractère à l’écran tandis que scanf
est utilisée pour la saisie de données
formatées, qu’il s’agisse de lettres, de chiffres ou de chaînes de caractères.
Les prototypes de ces deux fonctions sont respectivement
int printf(const char * format,...);
et
int scanf(const char * format,...);
où :
const char * format
est une chaîne de caractère,...
signifient que ces fonctions sont variadiques i.e que ces fonctions peuvent un nombre variable de paramètres.
On peut ainsi écrire printf
avec un seul paramètre :
#include <stdio.h> int main() { printf("Votre chaine de caractères ici\n"); return 0; }
ou avec plusieurs paramètres
#include <stdio.h> int main() { int i = 5; printf("i =\n %d\n", i); return 0; }
où %d
est la spécification de format pour les entiers et i
est son
argument. Le tableau 1 présente les différents formats en fonction
des types de variables.
Type | Format |
---|---|
int |
%d |
long |
%ld |
float/double |
%f/%lf |
char |
%c |
string (char* ) |
%s |
pointeur (void* ) |
%p |
entier hexadécimal | %x |
Pour la fonction scanf
, la valeur retournée de type entier correspond le
nombre de variables affectées par la saisie et permet donc de vérifier que la
saisie s’est correctement passée. En cas d’erreur de lecture, cette fonction
renvoie EOF
et indique la raison de l’erreur dans la variable errno
. Le code
ci-dessous présente un exemple d’utilisation de la fonction scanf
#include <stdio.h> int main() { int nombre = 0; int res = 0; printf("Entrez une valeur"); res = scanf("%d", &nombre); if (res == 1) printf("Votre valeur est %d\n", nombre); else // traitement de l’erreur avec errno ou perror inclus dans errno.h return 0; }
La fonction scanf
recopie la saisie de l’utilisateur à une adresse
mémoire. Cette adresse doit être spécifiée dans la fonction scanf
: la saisie
sera ainsi enregistrée à l’adresse de la variable nombre
, d’où la présence de
&
devant nombre
).
Tout comme printf
propose différents formats en fonction du type de variable,
il est possible de capturer plusieurs types de données avec la fonction
scanf (cf. Tableau 1).
Les nouvelles possibilités d’entrée/sortie du C++
Les commandes d’entrée sortie cout
/ cin
du C++ n’ont pas besoin de
spécification de format, elles prennent en charge le formatage des variables à
afficher ou à affecter par l’utilisateur.
Syntaxe
cout << VariableAfficherNum1 << VariableAfficherNum2 << ... ; cin >> VariableA_AffecterNum1 >> VariableA_AffecterNum2 >> ... ;
L’opérateur <<
ou >>
indique la direction du flot de données: >>
va dans
le sens de la lecture (occidentale) et va donc vers l’ordinateur. À contrario,
<<
sort de l’ordinateur.
Exemple :
const int i = 25; const double f = 4.52; int j; cout << "i = " << i << endl << "f = " << f; cout << endl << "Entrer j" << endl; cin >> j ;
Remarques
- La bibliothèque qui contient entre autre
cout
etcin
estiostream
, il faut donc l’inclure dans le programme par#include <iostream>
. Elle remplace la librairie standardstdio.h
utilisée en langage C. Il est nécessaire d’ajouter au début du code la commande suivante
using namespace std;
pour utiliser les entrées-sorties directement via
cout=/=cin
. Sinon, il faut utiliser l’opérateur de portée::
pour écrirestd::cout
(cf. "Fiches sur les spécificités du C++").- Le saut de ligne caractérisé par la commande
\n
peut également être remplacé par l’opérateurendl
. L’utilisation deendl
apporte une plus grande lisibilité au code. Par ailleurs, la grande majorité des opérations liées à la présentation (\t
pour tabulation …) sont regroupées dans la librairieiomanip
, la synthaxe propre au langage C restant, en tout état de cause, valable.