Ploum, c’est encore moi les geeks, toujours dans la série “jouons avec le C++”. Aujourd’hui au programme je sèche sur l’utilisation correcte de la fonction cin.getline()
Le but est de rédéfinir l’opérateur d’extraction pour une classe Personne (EDIT: avec un nom et un prénom qui sont des char* et non des strings), de manière à pouvoir faire “cin >> MonObjetPersonne”.
cout << "Nom ?" << endl;
cin.ignore(50, '\n');
cin.getline(buffer, 50);
temp.setNom(buffer);
cout << "Prénom ?" << endl;
cin.getline(buffer, 50);
temp.setPrenom(buffer);
//ça marche si je tape 'Test' et puis 'Test' mais pas si je tape 'Teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeest' et puis 'Test'
}[/codebox]
Le problème: ça fonctionne si l’entrée au clavier ne dépasse pas 50 caractères, mais si ça dépasse la taille de buffer alors les entrées suivantes au clavier ne passent pas: c’est comme si je tapais directement entrée à chaque fois. Si je refais un cin.ignore après ça ne marche pas non plus: je dois appuyer 2 fois sur enter pour valider une entrée.
J’ai écrit ça vite fait, c’est pas fantastiquement beau mais ça doit répondre à ta question. Je suis un chouïa rouillé en C++ ces temps-ci (saleté de C ), désolé si ce n’est pas optimum:
Merci mon cher Doc Toise mais j’ai bien peur que tu te sois donné du mal pour rien : le problème est que dans mon cas je dois utiliser des char* pour nom et prénom, au lieu de la classe string. J’aurais du préciser que c’est la même classe que dans mon autre thread, au temps pour moi.