2014-02-07 38 views
0

這是我的程序中的一段代碼,cin.getline沒有使用switch語句,但沒有switch語句它的工作原理,當我用switch語句它只是跳過輸入So在我的代碼中,我評論了cin.getline,並用cin替換了它>> userData;cin.getline不能使用switch語句

請告訴我什麼是問題當我用switch語句使用它時。

switch(option) 
{ 

case 1: 
    cout<<"Enter string "<<endl; 
    //cin.getline(userData, 100); 
    cin.getline(userData,100); 
+3

您應該顯示問題的編譯示例。你顯示的代碼與問題沒有任何關係 –

回答

2

很可能出現在你的輸入流\n,從以前的代碼,您遺憾的是在問題沒有顯示出來,您需要刷新它cin.getline()工作。

接受的智慧是使用ignore

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
cin.getline(userData,100); 
+0

我已經使用過命名空間std,請再次告訴我cin.ignore行 – user3215228

+0

這裏我更新了答案並刪除了std。但是要知道 - 明確使用std命名空間要好得多。有時節省很多ADL痛苦。 – mockinterface

1

您的代碼works

#include <iostream> 

int main(){ 
    char userData[100]; 
    auto option = 1; 
    switch(option) { 
     case 1: 
      std::cout << "Enter string" << std::endl; 
      std::cin.getline(userData, 100); 
    } 

    std::cout << userData; 

    return 0; 
} 

必須有你不顯示的東西。

+0

不,這是**你的**代碼,工作:)嘗試添加'cout <<「給我一個數字」<< endl; cin >>我;'在'cin.getline()'之前有'\ n'掛在在按下Enter鍵的緩衝區中。 – mockinterface

+0

在OP的代碼中沒有'cout <<「給我一個數字」<< endl; cin >> i;'。 – user2079303

+0

OP代碼中也沒有'auto option = 1;'。我試圖說明,你無法證明OPs代碼「通過擴展」工作。 – mockinterface