0
使用C++ 14。我已經閱讀了許多關於這個問題的文章。getline(cin,string)沒有給出預期的輸出
如果我在下面運行這段代碼,它會跳過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);
}
如果我添加的每個函數getline線後CIN忽略(例如下面我如何實現它),它將刪除輸入字符串的一些字符,使用錯誤的變量來存儲它們。請注意,我有空白字符串。
std::getline(std::cin, courseName);
std::cin.ignore();
這就是我得到:
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
我也試圖刷新清點,並沒有幫助。
我的打印功能就像一個魅力,如果我從main手動添加課程,我會得到預期的輸出,所以問題肯定是cin/getline。
Test registered :
test id = 1, course name = History 2, test name = History 2 exam , date = 01.02.2017
我用函數getline作爲解釋在這裏:http://www.cplusplus.com/reference/string/string/getline/?kw=getline
任何幫助將不勝感激,謝謝。
如果我不使用cin.ignore,我永遠不會進入cin本身。該程序進一步到下一個cout,無需等待輸入。它基本上列出了我的cout,這是我最初的問題。 @Sinapse –
'cin.ignore'只會傳遞你輸入的一個字符!你可以測試上面的代碼嗎?你的編譯器是什麼? – Sinapse
你的代碼有效,我的沒有。該程序不會等待輸入。請看看我最初的代碼(沒有cin.ignore的代碼),我沒有看到太大的區別。我使用GDB clion btw。 –