IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours complet pour apprendre à programmer en D


précédentsommairesuivant

30. Entrée formatée

Il est possible d'indiquer le format des données attendues à l'entrée. Le format indique aussi bien les données à lire que les caractères qui doivent être ignorés.

Les indicateurs de formatage en entrée du D sont similaires à ceux du langage C.

L'indicateur de formatage " %s", que nous avons déjà utilisé dans les chapitres précédents, lit une donnée selon le type de la variable. Par exemple, comme le type de la variable suivante est double, les caractères à l'entrée seront lus comme une valeur flottante :

 
Sélectionnez
double nombre;
 
readf(" %s", &nombre);

La chaîne de formatage peut contenir trois types d'information :

  • le caractère espace : indique zéro, un ou plusieurs caractères blancs dans l'entrée et indique que tous ces caractères devraient être lus et ignorés ;
  • indicateur de format : comme pour les indicateurs de format de sortie, les indicateurs de format d'entrée commencent par le caractère % et déterminent le format de la donnée à lire ;
  • n'importe quel autre caractère : indique que ces caractères sont attendus dans l'entrée tels quels, et qu'ils doivent être lus et ignorés.

La chaîne de formatage permet de sélectionner des informations spécifiques dans l'entrée et d'ignorer les autres.

Penchons-nous sur un exemple qui utilise les trois types d'information dans la chaîne de formatage. Supposons que l'on s'attende à voir apparaître le numéro d'étudiant et la classe dans l'entrée dans le format suivant :

 
Sélectionnez
numero:123 classe:90

Supposons également que les étiquettes numero: et classe: doivent être ignorées. La chaîne de formatage suivante sélectionnera les valeurs du numéro et de la classe et ignorera les autres caractères :

Image non disponible

Les caractères surlignés doivent apparaître tels quels dans l'entrée ; readf() les lit et les ignore.

Le caractère espace qui apparaît dans la chaîne de formatage fera que tous les caractères blancs qui apparaîtront exactement à cet endroit seront lus et ignorés.

Comme le caractère % a un sens spécial dans les chaînes de formatage, quand ce caractère lui-même doit être lu et ignoré, il doit être écrit deux fois : %%.

Dans le chapitre sur les chainesChaînes de caractères pour lire une ligne de données depuis l'entrée, nous avons utilisé chomp(readln()). On peut également faire ceci en plaçant un caractère \n à la fin de la chaîne de formatage :

 
Sélectionnez
import std.stdio;
 
void main()
{
    write("Prénom : ");
    string prenom;
    readf(" %s\n", &prenom);  // ← \n à la fin
 
   write("Nom : ");
   string nom;
   readf(" %s\n", &nom);      // ← \n à la fin
 
   write("Âge : ");
   int age;
   readf(" %s", &age);
 
   writefln("%s %s (%s)", prenom, nom, age);
}

Les caractères \n à la fin des chaînes de formatage quand on lit le nom et le prénom font que les caractères de nouvelle ligne sont lus depuis l'entrée et ignorés. Cependant, il peut toujours être nécessaire de supprimer les caractères blancs se trouvant éventuellement en fin de ligne avec chomp().

30-1. Caractères d'indicateur de format

  • d : lit un entier dans le système décimal.
  • o : lit un entier dans le système octal.
  • x : lit un entier dans le système hexadécimal.
  • f : lit un nombre en virgule flottante.
  • s : lit selon le type de la variable.
  • c : lit un caractère. Cet indicateur permet aussi de lire des caractères blancs (ceux-ci ne sont pas ignorés).

Par exemple, si l'entrée contient « 23 23 23 », les valeurs seront lues différemment selon l'indicateur de format utilisé :

 
Sélectionnez
int nombre_d;
int nombre_o;
int nombre_x;
 
readf(" %d %o %x", &nombre_d, &nombre_o, &nombre_x);
 
writeln("Lu avec %d : ", nombre_d);
writeln("Lu avec %o : ", nombre_o);
writeln("Lu avec %x : ", nombre_x);

Même si l'entrée contient trois ensembles identiques de caractères « 23 », les valeurs des variables sont différentes :

 
Sélectionnez
Lu avec %d : 23
Lu avec %o : 19
Lu avec %x : 35

Très brièvement, 23 vaut 2 × 8 + 3 = 19 dans le système octal et 2 × 16 + 3 = 35 dans le système hexadécimal.

30-2. Exercice

Supposons que l'entrée contient la date dans le format année.mois.jour. Écrivez un programme qui affiche le numéro du mois. Par exemple, si l'entrée est 2009.09.30, la sortie doit être 9.

La solutionEntrée formatée - Correction.


précédentsommairesuivant