0

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

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

我想知道的是:提示实际上是在询问用户输入,还是仍在从因空格而留下的缓冲区中读取?

4

4 回答 4

8

有一个getline定义为strings

std::string line;
std::getline(std::cin, line);
于 2009-09-29T01:11:00.190 回答
6

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

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

编辑:不要删除它,因为它是一个有用的参考,但是std::getline对于想要std::string. istreamgetline作品char *代替。

于 2009-09-29T01:09:34.490 回答
0

getline()<string>标题中

我总是忘记这一点。

于 2017-07-07T02:31:50.753 回答
0

是的。提示实际上是在要求用户输入,但它期望的是一个单词而不是一行。这可能就是它对你显得空间敏感的原因。

假设您想阅读不止一行,您想要的就是这个。

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

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

  • cin << dummy // 这应该有 >> 运算符
  • 该变量可能应该称为“单词”而不是“虚拟”
  • retvalue += 虚拟;// 你需要在单词之间添加空格
  • } 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);
    }
}
于 2017-02-22T18:26:27.323 回答