C++ cin 问题

发布于 2024-08-05 14:23:19 字数 388 浏览 9 评论 0原文

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

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

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

Okay, I was writing a simple C++ function to combine cin'd strings. I'm working on Linux at the moment, so I don't have the luxury of a simple "getline(cin, input)" command. Here's the code so far:

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

What I want to know is this: is the prompt actually asking the user for input, or is it still reading from the buffer that was left over because of a space?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

汹涌人海 2024-08-12 14:23:19

strings定义了一个getline

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

There is a getline defined for strings:

std::string line;
std::getline(std::cin, line);
听不够的曲调 2024-08-12 14:23:19

我现在正在 Linux 上工作,所以我没有简单的“getline(cin, input)”命令。

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

编辑:不删除它,因为它是一个有用的参考,但对于想要 std::string 的人来说,AraK 的帖子说明 std::getline 应该是首选代码>. istreamgetline 工作在 char * 上。

I'm working on Linux at the moment, so I don't have the luxury of a simple "getline(cin, input)" command.

What's Linux got to do with it? getline is standard C++, except it's spelled cin.getline(input, size[, delimiter]).

Edit: Not deleting this because it's a useful reference, but AraK's post illustrating std::getline should be preferred for people who want a std::string. istream's getline works on a char * instead.

苄①跕圉湢 2024-08-12 14:23:19

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

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

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

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

  • 辛 << dummy // 这应该有>>运算符
  • 该变量可能应该被称为“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);
    }
}

Yes. the prompt IS actually asking the user for input, but it is expecting a word rather than a line. That is possibly why it appeared space sensitive to you.

What you want, assuming you want to read more than one line, is this.

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

The code had a few other issues.

  • cin << dummy // this should have the >> operator
  • The variable should probably be called "word" not "dummy"
  • retvalue += dummy; // you would need to add spaces between words
  • } while // the while test should be some test for end of line

The loop in the question is closer to a word reader.
This would do for that objective.

#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);
    }
}
梦里梦着梦中梦 2024-08-12 14:23:19

getline() 位于 标头中,

我总是忘记这一点。

getline() is in the <string> header

I always forget that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文