2009-09-29 60 views
0

好的,我正在編寫一個簡單的C++函數來組合cin'd字符串。目前我正在研究Linux,所以我不喜歡簡單的「getline(cin,input)」命令。這裏是到目前爲止的代碼:C++ cin問題

string getLine()   
{ 
    string dummy;   
    string retvalue;   
    do 
    { 
     cin << dummy; 
     retvalue += dummy; 
    } while   
    return retvalue;   
} 

我想知道的是:是的提示實際上是要求用戶輸入的,或者是它仍然從已離開,因爲的空間在緩衝區中讀取?

+4

你似乎在do/while循環中缺少while語句... – 2009-09-29 01:06:10

+2

爲什麼你不能使用cin的getline成員函數? http://www.cplusplus.com/reference/iostream/istream/ – MichaelM 2009-09-29 01:10:41

+3

我沒有看到Linux和缺少'​​getline'功能之間的聯繫。你的發行版多少年了,它沒有1998年的標準C++庫?另外,請**複製並粘貼**您的**真實代碼**。很顯然,這不是真正的代碼,因爲while循環沒有條件,而'cin'操作符指向錯誤的方向。「您提到的提示」沒有做任何事情,因爲您發佈的代碼根本沒有運行。 – 2009-09-29 03:20:01

回答

8

沒有爲strings定義的getline

std::string line; 
std::getline(std::cin, line); 
6

我現在在Linux上工作,所以我沒有奢侈的簡單的「getline(cin,input)」命令。

Linux與它有什麼關係? getline是標準C++,但拼寫爲cin.getline(input, size[, delimiter])

編輯:不刪除這一點,因爲它是一個有用的參考,但其說明std::getline阿拉克的職位應該是首選誰想要一個std::string人。 istreamgetline改爲使用char *

+0

cin.getline(...)不適用於字符串,它適用於char *,但答案很好:) – AraK 2009-09-29 01:12:04

+1

它是否表明我是C程序員,他最後一次在C++時代之前做過? :) – hobbs 2009-09-29 01:18:54

0

是。提示信息實際上是要求用戶輸入,但它是期待一個字而不是一行。這可能是爲什麼它看起來對你太空敏感。

你想要什麼,假設你想閱讀多行,是這樣的。

#include <iostream> 
... 
std::string sLine; 
while(getline(std::cin, sLine)) { 
    // process sLine; 
} 

該代碼有一些其他問題。

  • CIN < <假//這應該>>操作
  • 變量或許應該被稱爲 「字」 不 「假」
  • retvalue + =假; //你需要的話
  • }而之間加空格//的,而測試應該有一些測試線

的結束問題的循環更接近於單詞讀者。 這將爲此目的。

#include <string> 
#include <iostream> 
#include <list> 
... 
void getStandardInput(std::list<std::string> & stringList) { 

    std::string word; 
    while (true) { 
     cin >> word; 
     if (cin.eof()) 
       return; 
     stringList.push_back(word); 
    } 
} 
0

getline()是在<string>

我總是忘記這一點。