É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 * formatest 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
coutetcinestiostream, il faut donc l’inclure dans le programme par#include <iostream>. Elle remplace la librairie standardstdio.hutilisé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
\npeut également être remplacé par l’opérateurendl. L’utilisation deendlapporte une plus grande lisibilité au code. Par ailleurs, la grande majorité des opérations liées à la présentation (\tpour tabulation …) sont regroupées dans la librairieiomanip, la synthaxe propre au langage C restant, en tout état de cause, valable.