1

Je suppose que cette question a déjà été posée, mais mes recherches ont été infructueuses. Vous pouvez donc me rediriger vers un autre sujet si vous croyez qu'il réponde à ma question.

Voici mon problème : évidement, cin >> toto (où toto est une std::string) s'arrête au premier caractère d'espacement lors de la lecture du clavier. Ce que je veux, c'est lire toute une ligne (jusqu'à l'enter).

En cherchant sur Internet, je suis tombé sur la fonction std::getline(cin, toto, '\n') qui, sur papier, devrait me donner ce que j'ai de besoin. Cependant, j'obtiens un résultat bizarre : lors de la première invocation, la fonction exige 2 enters avant de retourner. Lors de la seconde, un seul enter suffit, mais la chaîne qui devrait contenir les caractères est vide. Ensuite, tous les appels suivants semblent retourner immédiatement, sans attendre un enter.

J'utilise (par obligation grin) VC++ 6.0 sous Windows XP.

J'aimerais savoir s'il y a un autre moyen que de coder à la mitaine un autre getline (en utilisant cin.get()) ?

2

y a moyen de spécifier quels caractères terminent un "cin >> toto", je crois... (je peux pas t'en dire plus de tête)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

getline(cin,toto,'F')
où 'F' est ton caractere de fin (par défaut, c \n)

4

nEUrOO :
getline(cin,toto,'F')
où 'F' est ton caractere de fin (par défaut, c \n)

Merci, mais elle ne semble pas fonctionner pour moi. Je pense que je vais la réimplémenter, ce n'est pas trës complexe, juste moins clean.

Merci.

5

elle fonctionne tres bien je l'ai deja utilisée

6

JackosKing :
elle fonctionne tres bien je l'ai deja utilisée

C'est dommage que ce ne sois pas le cas sur mon ordi.

7

"fgets" en C marche tres bien, ca doit donc certainement marcher pour toi... ( c est une fonction standart du C )
pour plus d info : man fgets
Le monde se separe en 10 categories de gens : ceux qui connaissent le binaire et ceux qui ne le connaissent pas.

8

Il parle de C++

9

mobi38 :
"fgets" en C marche tres bien, ca doit donc certainement marcher pour toi... ( c est une fonction standart du C )
pour plus d info : man fgets

J'ai fini par utiliser cin.getline(buffer, len), c'est ce que mon prof recommandait sur son site pour pallier au problème... Mais merci pour le conseil.

10

fgets ne marche pas avec les flux de fichiers !

11

Quesoft
:
JackosKing :
elle fonctionne tres bien je l'ai deja utilisée

C'est dommage que ce ne sois pas le cas sur mon ordi.

J'ai déjà eu le problème. C'est un bug dans Visual C++ (qui n'affecte pas que cin.getline, d'ailleurs, mais aussi d'autres fonctions de lecture)
Il me semble que ça a été corrigé dans un service pack ou dans la version suivante.

12

spectras
:
Quesoft
:
JackosKing :
elle fonctionne tres bien je l'ai deja utilisée

C'est dommage que ce ne sois pas le cas sur mon ordi.

J'ai déjà eu le problème. C'est un bug dans Visual C++ (qui n'affecte pas que cin.getline, d'ailleurs, mais aussi d'autres fonctions de lecture)
Il me semble que ça a été corrigé dans un service pack ou dans la version suivante.

Comme je n'ai pas appliqué de SP, c'est très possible.