用户输入的换行符,而无需按Enter

时间:2019-05-28 09:02:21

标签: c++ user-input cin

首先,我应该提到我发现了几个密切相关的问题。例如herehere。但是,我既不想使用printf也不想使用\n(因为我已经知道它不起作用)。

用户是否可以在不按Enter的情况下输入换行符(可能是转义序列)?

例如:

#include <iostream>
#include <string>

int main () {
    std::string a,b;
    std::cin >> a;
    std::cin >> b;
    std::cout << a << "\n" << b;
}

用户是否可以提供单行输入

hello ??? world 

使上面的文字可以打印

hello
world

2 个答案:

答案 0 :(得分:1)

您可以这样做

  

std :: string a,b;
  std :: cin >> a >> b;
  std :: cout << a <<“ \ n” << b;

用户可以输入带有空格的内容。

答案 1 :(得分:1)

(我假设您不希望使用空格来分隔字符串。例如,

Foo bar ??? baz qux

应该是两行。)

不可能配置流,以使???自动转换为换行符。为了使用户输入换行符,他们必须输入换行符,而不是其他任何内容。

您必须自己解析。 这是一个将???当作定界符的解析器示例:

void read_string(std::istream& is, std::string& dest)
{
  std::string str = "";
  for (char c; is.get(c);) {
    switch (c) {
    case '?':
      if (is.get(c) && c == '?') {
        if (is.get(c) && c == '?') {
          dest = str;
          return;
        } else {
          str += "??";
        }
      } else {
        str += "?";
      }
    default:
      str += c;
    }
  }
}

例如输入

? is still one question mark????? is still two question marks???

分为两行:

? is still one question mark
?? is still two question marks

live demo