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