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