Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不按enter键从用户输入中换行_C++_User Input_Cin - Fatal编程技术网

C++ 不按enter键从用户输入中换行

C++ 不按enter键从用户输入中换行,c++,user-input,cin,C++,User Input,Cin,首先,我应该提到,我发现了几个密切相关的问题。如和。但是,我既不想使用printf,也不想使用\n(因为我已经知道它不起作用) 用户是否可以在不按enter键的情况下输入换行符(可能是转义序列? 例如: #include <iostream> #include <string> int main () { std::string a,b; std::cin >> a; std::cin >> b; std::cou

首先,我应该提到,我发现了几个密切相关的问题。如和。但是,我既不想使用
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
你可以这样做

std::字符串a,b
标准:cin>>a>>b
std::cout(我假设您不希望用空格来分隔字符串。例如

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

@L.F.我确实按enter键,但只按了一次,所以第一个
cin
应该一直读到
,第二个cin,因为它仍然在流中。当您输入
Hello World
时,中间有一个空格,
a
将设置为
“Hello”
,而
b
将设置为
“World”
。这就是你想要的吗?我有义务问:为什么?@mch这是问题的明显答案,但不幸的是,这不是我真正想要的。这个例子实际上完全超出了我真正想要的。我不想修正这个问题,因为已经有答案了……
std::cin>>a>>b
std::cin>>a完全相同;标准:cin>>b。哼,这有点尴尬。。。我的例子并不是我真正想要的。当然,只需输入“hello world”即可生成正确的输入。实际上我想用一行get来读两行,但现在我意识到这是没有意义的。抱歉给你带来了困惑…thanbks得到了答案如果用户想在字符串中加入空格怎么办?嗯,这有点尴尬。。。我的例子并不是我真正想要的。当然,只需输入“hello world”即可生成正确的输入。实际上我想用一行get来读两行,但现在我意识到这是没有意义的。为混乱道歉。。。无论如何,谢谢你的回答。我真正想要的是连续两次调用
getline
读取用户输入,用户只需按一次enter键。由于这是完全不同的问题,我将保留这个问题,也许会打开一个新的问题。@formerlyknownas_463035818流不会为您进行这种转换;-)我想,如果有可能的话,那只能通过我正在使用的终端提供的一些功能,将一些转义序列解释为新的线路。我想我应该在下次问第一个问题之前喝第一杯咖啡;)@在C++ I/O流的范围之外的FraveNase463035818;
? is still one question mark
?? is still two question marks