C ++ cin问题

时间:2009-09-29 01:03:43

标签: c++ buffer cin

好的,我正在编写一个简单的C ++函数来组合cin'd字符串。我目前正在开发Linux,所以我没有简单的“getline(cin,input)”命令。这是迄今为止的代码:

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

我想知道的是:提示实际上是要求用户输入,还是因为空格而仍然从缓冲区中读取?

4 个答案:

答案 0 :(得分:8)

getline定义了strings

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

答案 1 :(得分:6)

  

我目前正在使用Linux,所以我没有简单的“getline(cin,input)”命令。

Linux与它有什么关系? getline是标准的C ++,除了拼写为cin.getline(input, size[, delimiter])

编辑:不删除此项,因为它是一个有用的参考,但AraK的帖子说明std::getline应该是想要std::string的人的首选。 istream的{​​{1}}代替getline

答案 2 :(得分:0)

是。提示IS实际上是在询问用户输入,但它期待的是一个单词而不是一行。这可能就是为什么它对你来说太敏感了。

你想要的是什么,假设你想读多行,就是这个。

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

该代码还有其他一些问题。

  • cin&lt;&lt;假//这应该有&gt;&gt;操作
  • 变量应该被称为“word”而不是“dummy”
  • retvalue + = dummy; //你需要在单词之间添加空格
  • }而while // while测试应该是对行尾的一些测试

问题中的循环更靠近单词阅读器。 这样做可以实现这一目标。

#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);
    }
}

答案 3 :(得分:0)

getline()位于<string>标题

我总是忘记这一点。