J'essaie d'ajouter des variables par les utilisateurs saisis en utilisant >> ou getline, mais cela donne des valeurs nulles avec les deux. Comme nous le savons, getline n'ignore pas les premiers caractères d'espacement, c'est pourquoi i ' m en utilisant des espaces de chaîne comme employeeName = ""; string désignation = ""; .
Quelqu'un peut-il m'aider à obtenir une sortie correcte
class Employee{
public:
int employeeId,salary;
string employeeName=" ";
string designation=" ";
void getEmployee(){
cin>>employeeId;
getline(cin,employeeName);
getline(cin,designation);
cin>>salary;
}
void ShowEmployee(){
cout<<"Employee Id="<<employeeId<<"\n";
cout<<"Employee Name="<<employeeName<<"\n";
cout<<"Designation="<<designation<<"\n";
cout<<"Salary="<<salary<<"\n";
}
};
int main() {
Employee ob;
ob.getEmployee();
ob.ShowEmployee();
}
3 Réponses :
Mais vous n'appelez pas getEmployee dans votre exemple. Avez-vous oublié?
Vous pouvez également essayer un constructeur en passant le std :: istream et à lui comme
Employee(std::istream& in) {
in >> this->employeeId;
in >> this->salary;
....
}
Désolé, j'ai oublié d'appeler getEmployee ici, j'ai également essayé cela en utilisant le constructeur `` this '' mais il donne les mêmes valeurs nulles .Veuillez vérifier le code modifié et aidez-moi.
Pas de problème. Pour une approche très rapide et très sale, vous pouvez utiliser un cin.ignore (); avant votre premier std :: geline (...) qui permettra de saisir des lignes terminées par un NL.
Comme @Kaldrr l'a souligné précédemment, il serait préférable de ne pas mélanger l'opérateur >> et getlline () Il semble que vous puissiez lire toutes les informations dans std :: string en utilisant getline et convertir celles qui doivent être des nombres à la place. Par exemple, en utilisant cette approche std: stringstream
Vous n'appelez jamais les fonctions membres de getEmployee .
Comme votre objet Employee est créé sur la pile, et que employeeId et salaire ne sont pas initialisés, ils contiennent des valeurs de déchets à l'intérieur.
Dans la fonction membre ShowEmployee , vous ne sortez que la valeur de la variable salaire , donc je suppose que ce n'est pas exactement le code que vous compilez et tester par vous-même.
En ce qui concerne votre raisonnement pour lequel vous utilisez getline , je ne comprends pas du tout, la chaîne qui est passée en tant que deuxième argument sera écrasée, donc tout ce qu'il y avait avant l'appel est perdu. Mais si vous souhaitez mélanger les appels operator>> et getline sur le même flux comme vous le faites, vous devez utiliser ignore , car operator>> n'extrayera pas '\ n' du flux, qui sera lu par getline .
getline(cin,employeeName); getline(cin,designation); In the code above you are overwriting the string,If you want to mix users input of multiple datatypes try to use cin.ignore; before your first std::getline(...).
Voter pour fermer comme faute de frappe. Vous avez oublié d'appeler
getEmployee ()et vous n'avez pas mis toutes les variables en sortie dans vos instructionscout <<(sauf poursalaire).Et en prévision du problème suivant, veuillez lire c ++ getline () n'attend pas l'entrée de la console lorsqu'il est appelé plusieurs fois
Désolé j'ai oublié ces choses, veuillez vérifier le code modifié et aidez-moi à obtenir une sortie correcte.
Cela vous aiderait si vous pouviez également publier votre texte d'entrée.
oui j'avais téléchargé, veuillez le vérifier