2012-03-12 75 views
12

閱讀假設我想從輸入這樣的線路整數閱讀:告訴CIN停止在新行

1 2 3 4 5\n 

我想CIN停止在「\ n」字符,但CIN似乎並沒有認識到它。

以下是我用過的。

vector<int> getclause() { 
    char c; 
    vector<int> cl; 

    while (cin >> c && c!='\n') {  
    cl.push_back(c); 
    cin>>c; 
    } 
    return cl; 
} 

我該如何修改它,以便在看到'\ n'字符時停止cin?

+7

CIN是空格分隔,所以任何空白(包括'\ N')將被丟棄。因此,'c'永遠不會是'\ n'。 – crashmstr 2012-03-12 19:45:35

回答

22

使用函數getline和istringstream:

#include <sstream> 
/*....*/ 
vector<int> getclause() { 
    char c; 
    vector<int> cl; 
    std::string line; 
    std::getline(cin, line); 
    std::istringstream iss(line); 
    while (iss >> c) {  
    cl.push_back(c); 
    } 
    return cl; 
} 
+0

我正在變量'std :: istringstream iss'有初始化程序,但不完整的類型 – Mark 2012-03-12 19:53:43

+0

'getline'也在命名空間'std'中,我想。 – 2012-03-12 19:54:46

+2

@Mark:這意味着你需要'#包括'。該消息幾乎總是意味着已經聲明瞭一個類型,但是你錯過了實際的定義。換句話說,你錯過了一個標題。 – 2012-03-12 19:55:25

1

使用std ::函數getline,這將這樣的伎倆