我需要逐个符号阅读。但我不知道如何阅读,直到输入结束。例如测试系统将 cin>>somecharvariable m 次。我必须逐个符号地阅读所有字符。只有m次。我该怎么做?
原文由 tucnak 发布,翻译遵循 CC BY-SA 4.0 许可协议
有几种方法可以一次读取一个字符,直到您将它们全部读完,但没有一种方法一定是最好的。
就个人而言,我会使用以下代码:
char c;
while (cin.get(c)) {
// Process c here.
}
如果您只需要读取 m
字符,请考虑使用 for
循环:
char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
// Process c here.
}
只要满足两个条件,就会运行循环:(1) 小于 m
字符已被读取,并且 (2) 仍有字符要读取。
然而,这两种解决方案都有一个缺点:它们的效率相对较低。一次性读取 m
字符效率更高。
所以首先分配一个足够大的缓冲区来存储 m
字符然后尝试读取它们:
std::vector<char> buffer(m);
cin.read(&buffer[0], m);
unsigned total_read = cin.gcount();
注意最后一行 - 这将告诉您 m
字符是否已被实际读取。
原文由 Konrad Rudolph 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
如果您想逐个字符地格式化输入,请执行以下操作:
如果要读取原始字节,请执行以下操作:
在任何一种情况下,
infile
应该是std::istream &
或类似类型,例如文件或std::cin
。