2017-09-13 135 views
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

任何幫助將不勝感激,謝謝。

回答

0

通過使用cin.ignore你搞亂了輸入本身。如果你想擺脫\n角色,你不必! getline將自動執行此操作。所以只是不要使用ignore函數,代碼會很好。 這個作品:

#include<iostream> 

using namespace std; 

int main() 
{ 
    string courseName = ""; 
    string testName = ""; 
    string date = ""; 

    cout << "Enter course name: " << std::endl; 
    getline(std::cin, courseName); 

    cout << "Enter test name: " << std::endl; 
    getline(std::cin, testName); 

    cout << "Enter test date: " << std::endl; 
    getline(std::cin, date); 

    cout << courseName << endl; 
    cout << testName << endl; 
    cout << date << endl; 
    return 0; 
} 
+0

如果我不使用cin.ignore,我永遠不會進入cin本身。該程序進一步到下一個cout,無需等待輸入。它基本上列出了我的cout,這是我最初的問題。 @Sinapse –

+0

'cin.ignore'只會傳遞你輸入的一個字符!你可以測試上面的代碼嗎?你的編譯器是什麼? – Sinapse

+0

你的代碼有效,我的沒有。該程序不會等待輸入。請看看我最初的代碼(沒有cin.ignore的代碼),我沒有看到太大的區別。我使用GDB clion btw。 –