Pointeurs, références & allocation dynamique Rappels sur les fonctions Les spécificités du C++ Structures et classes Encapsulation des données Notions de constructeur et de destructeur Fonctions et classes amies Surcharge d'opérateur Héritage Notions de patrons de fonctions et de classes Introduction à la librairie standard STL
Compilation et directives de préprocesseur Convention d'écriture et organisation des programmes Écriture/lecture sur l'entrée/sortie standard Les membres données statiques Utilisation de enum et de typedef
Retour menu principal

É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;
}

%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.

Table 1: Format d'écriture en fonction du type de variable à afficher.
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 et cin est iostream, il faut donc l’inclure dans le programme par #include <iostream>. Elle remplace la librairie standard stdio.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 écrire std::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érateur endl. L’utilisation de endl 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 librairie iomanip, la synthaxe propre au langage C restant, en tout état de cause, valable.