![](/img/trans.png)
[英]In C++ while using cin.get(), how can I not limit the number of characters a user can enter?
[英]How can I ignore final newline char when using (cin.get(c))
我有一个简短的程序,它接受文本输入并输出每个字符,包括完整的转义序列。
“Stack Overflow 2020”变成 -> “Stack\\sOverFlow\\s\\2\\0\\2\\0”
但是,当我运行我的程序时,我必须在终端中使用 -n 标志,它包含一个额外的换行符。 我可以阻止我的程序在输出结束时输出这个额外的 /n(换行符)字符吗?
带旗
echo -n "Stack OverFlow 2020" | ./escapec -> Stack\\sOverFlow\\s\\2\\0\\2\\0
没有 - 在输出末尾查看额外的换行符
echo "Stack OverFlow 2020" | ./escapec -> Stack\\sOverFlow\\s\\2\\0\\2\\0\\n
#include <string>
#include <map>
#include <iostream>
using namespace std;
string escapeChar(char c);
// EscapeMap is used by escapeChar to obtain the un-escaped string of ascii encodings. space, tab, carriage return and newline.
map<int, string> escapeMap = { {32, "\\s"}, {9, "\\t"}, {13, "\\r"}, {92, "\\"},{10,"\\n"} };
string escapeChar(char c) {
if (isdigit(c)) {
return "\\" + to_string(int(c) - 48);
}
else {
if (escapeMap.count(int(c))) {
return escapeMap.at(int(c));
}
}
return string(1, c);
}
int main() {
char c;
while (cin.get(c))
{
cout << escapeChar(c);
}
}
您可以使用peek
读取下一个字符而不将其从流中删除,然后如果它是EOF
并且当前字符是换行符,那么只需做一个解决方法:不要打印它:
while (cin.get(c)) {
if (c == '\n' && cin.peek() == EOF) break;
cout << escapeChar(c);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.