首先,我应该提到我发现了几个密切相关的问题。例如这里和这里。但是,我既不想使用printf
也不想使用n
(因为我已经知道它不起作用(。
用户是否可以在不按回车键的情况下输入换行符,可能是转义序列?
举个例子:
#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
?
你可以这样做
标准::字符串 a, b;
标准::CIN>> a>>b;
std::cout <<a <<"" <<b;
用户可以提供带有空格的输入。
(我假设你不希望空格分隔字符串。例如
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
现场演示