web-dev-qa-db-fra.com

Entrées multiples sur une seule ligne

J'ai regardé en vain et je crains que ce ne soit une question si simple que personne n'ose la poser.

Peut-on entrer plusieurs choses à partir d'une entrée standard sur une seule ligne? Je veux dire ceci:

float a, b;
char c;

// It is safe to assume a, b, c will be in float, float, char form?
cin >> a >> b >> c;
24
Joshua

Oui, vous pouvez saisir plusieurs éléments à partir de cin, en utilisant exactement la syntaxe que vous décrivez. Le résultat est essentiellement identique à:

cin >> a;
cin >> b;
cin >> c;

Cela est dû à une technique appelée "chaînage d'opérateur".

Chaque appel à operator>>(istream&, T) (où T est un type arbitraire) renvoie une référence à son premier argument. Donc cin >> a Renvoie cin, qui peut être utilisé comme (cin>>a)>>b Et ainsi de suite.

Notez que chaque appel à operator>>(istream&, T) consomme d'abord tous les caractères d'espacement, puis autant de caractères que nécessaire pour satisfaire l'opération d'entrée, jusqu'à (mais sans inclure) le premier caractère d'espacement suivant, caractère non valide ou EOF.

26
Robᵩ

Oui, vous pouvez.

De cplusplus.com :

Étant donné que ces fonctions sont des fonctions de surcharge d'opérateur, la façon habituelle dont elles sont appelées est la suivante:

   strm >> variable;

strm est l'identifiant d'un objet istream et variable est un objet de tout type pris en charge comme paramètre de droite. Il est également possible d'appeler une succession d'opérations d'extraction comme:

   strm >> variable1 >> variable2 >> variable3; //...

ce qui revient à effectuer des extractions successives à partir du même objet strm.

Remplacez simplement strm par cin.

6
Jeremy