Utilisation de C++ 14. J'ai lu beaucoup de messages concernant le problème.getline (cin, chaîne) ne donnant pas la sortie attendue
Si j'exécute ce code ci-dessous, il saute par-dessus les lignes getline.
#include <iostream>
#include "main_menu.h"
void MainMenu::AddTest()
{
std::string courseName = "";
std::string testName = "";
std::string date = "";
std::cout << "Enter course name: " << std::endl;
std::getline(std::cin, courseName);
std::cout << "Enter test name: " << std::endl;
std::getline(std::cin, testName);
std::cout << "Enter test date: " << std::endl;
std::getline(std::cin, date);
Test test(courseName, testName, date);
tests.Add(test);
std::cout << "Test registered : " << std::endl;
tests.Print(test.id);
}
Si j'ajouter après chaque cin ignorer les lignes de getline (exemple ci-dessous comment je mets en œuvre), il supprime certains caractères des chaînes d'entrée et utilise des variables mauvaises pour les stocker. Notez que j'ai des chaînes avec des espaces.
std::getline(std::cin, courseName);
std::cin.ignore();
C'est ce que je reçois:
Enter course name:
History 2
Enter test name:
History 2 exam
Enter test date:
2017.01.02
Test registered :
test id = 2, course name = , test name = istory 2, date = istory 2 exam
J'ai essayé aussi de vider Cout, n'a pas aidé.
Ma fonction d'impression fonctionne comme un charme, si j'ajoute des cours manuellement à partir de main, j'obtiens la sortie attendue, donc le problème est définitivement le cin/getline.
Test registered :
test id = 1, course name = History 2, test name = History 2 exam , date = 01.02.2017
J'utilise getline comme expliqué ici: http://www.cplusplus.com/reference/string/string/getline/?kw=getline
Toute aide serait très apprécié, je vous remercie.
Si je ne me le cin.ignore, je ne peux jamais entrer dans le cin lui-même. Le programme va plus loin au prochain cout, sans attendre d'entrée. Il liste essentiellement mes cout, c'est mon problème initial. @Sinapse –
'cin.ignore' passera juste un de vos caractères entrés! Pouvez-vous tester le code ci-dessus? Quel est votre compilateur? – Sinapse
Votre code fonctionne, pas le mien. Le programme n'attendra pas d'entrée. S'il vous plaît jeter un oeil à mon code original sur le dessus (celui sans cin.ignore), je ne vois pas beaucoup de différence. J'utilise GDB clion btw. –