[C++] Récupérer une chaine saisie par l'utilisateur : cin, getline...

Récupérer une chaine saisie par l'utilisateur : cin, getline... [C++] - C++ - Programmation

Marsh Posté le 08-10-2003 à 16:30:49    

Salut,
Je voudrais savoir quelle fonction faut-il préférer pour ce genre d'opération :
std::string s;
 
cin >> s;
ou
cin.getline(s, s.max_size());
ou
getline(cin, s);
 
ou mieux si vous avez!
merci
   ANT

Reply

Marsh Posté le 08-10-2003 à 16:30:49   

Reply

Marsh Posté le 08-10-2003 à 16:32:20    

buffer overflow avec la 2ème


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 08-10-2003 à 16:37:07    

ouais j'aime pas trop cette forme, pour l'instant j'utilise la dernière mais je suis incapable d'arguementer mon choix...

Reply

Marsh Posté le 08-10-2003 à 17:29:08    

je comprends pas la raison d'être de ce topic : si on veut lire une ligne entière dans une string, c'est obligatoirement la fonction getline, si on veut lire un mot dans une string l'opérateur >> des istream va bien (mais getline peut fonctionner également)
 
quand à votre prétendue fonction membre istream::getline(string &, size_t) elle n'existe pas.
 
donc je ne vois aucun problème


Message édité par Taz le 08-10-2003 à 17:30:47
Reply

Marsh Posté le 09-10-2003 à 08:55:18    

Taz a écrit :

je comprends pas la raison d'être de ce topic : si on veut lire une ligne entière dans une string, c'est obligatoirement la fonction getline, si on veut lire un mot dans une string l'opérateur >> des istream va bien (mais getline peut fonctionner également)
 
quand à votre prétendue fonction membre istream::getline(string &, size_t) elle n'existe pas.
donc je ne vois aucun problème


 

Citation :


istream members:  
(constructor) Construct an object  
operator>> Perform formatted input operation (extraction)  
gcount Get number of characters extracted by last unformatted input operation  
get Extract unformatted data from stream  
getline Get a line from stream  
ignore Extract and discard characters  
peek Peek next character  
putback Put the last character back to stream  
read Read a block of data  
readsome Read a block of data  
seekg Set position of the get pointer  
sync Syncronize stream's buffer with source of characters  
tellg Get position of the get pointer  
unget Make last character got from stream available again  
(destructor) No-op [virtual]  


 
Source: http://www.cplusplus.com/ref/iostr [...] index.html
 
Testé avec gcc 3.2.3:

Code :
  1. #include <istream>
  2. #include <iostream>
  3. int main(int,char**)
  4. {
  5. using namespace std;
  6. char buffer[513];
  7. cin.getline(buffer,512);
  8. cout << buffer << endl;
  9. return 0;
  10. }


 
Effectivement elle n'existe pas mais je pense qu'il a fait une faute de frappe/recopie en mettant une string à la place d'un char*  [:spamafote]
 
PS: je ne trouve pas cette méthode très utile/pratique


Message édité par LetoII le 09-10-2003 à 09:16:54

---------------
Le Tyran
Reply

Marsh Posté le 09-10-2003 à 08:58:45    

ouais enfin toi tu prends un char * et taz parlait de prendre un string & (:O)
 
edit de fourbe :O :D


Message édité par chrisbk le 09-10-2003 à 08:59:11
Reply

Marsh Posté le 09-10-2003 à 09:20:01    

chrisbk a écrit :

ouais enfin toi tu prends un char * et taz parlait de prendre un string & (:O)
 
edit de fourbe :O :D
 


 
Faut laisser le temps aux gens de finir avant de leur gueuler dessus  :pfff:


---------------
Le Tyran
Reply

Marsh Posté le 09-10-2003 à 09:22:20    

chrisbk a écrit :

ouais enfin toi tu prends un char * et taz parlait de prendre un string & (:O)

:o [:taz]
y a pas de faute de frappe possible, vous vous êtes lamentablement plantés


Message édité par Taz le 09-10-2003 à 09:23:01
Reply

Marsh Posté le 09-10-2003 à 09:27:58    

Taz a écrit :

:o [:taz]
y a pas de faute de frappe possible, vous vous êtes lamentablement plantés


 
:heink:
 
j'ai rien dit, moi, hein ?

Reply

Marsh Posté le 09-10-2003 à 09:29:21    

je te plussoyer :o

Reply

Marsh Posté le 09-10-2003 à 09:29:21   

Reply

Marsh Posté le 09-10-2003 à 09:30:32    

Taz a écrit :

:o [:taz]
y a pas de faute de frappe possible, vous vous êtes lamentablement plantés


 
Seul l'intéréssé peu répondre  [:spamafote]  
 
De toute façon l'intéret de cette méthode est nule  [:spamafote]


---------------
Le Tyran
Reply

Marsh Posté le 10-10-2003 à 15:13:15    

oui merci bien, j'utilise le getline(cin, string) qui me convient très bien!
au fait, Taz a bien dit pas de char* en c++ ? donc que des string quand on manipule des chaines de caractères ? c'est juste pour être sur...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed