2009-09-29 100 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>

我总是忘记这一点。