C cin char 逐个符号读取

新手上路,请多包涵

我需要逐个符号阅读。但我不知道如何阅读,直到输入结束。例如测试系统将 cin>>somecharvariable m 次。我必须逐个符号地阅读所有字符。只有m次。我该怎么做?

原文由 tucnak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 795
2 个回答

如果您想逐个字符地格式化输入,请执行以下操作:

 char c;
while (infile >> c)
{
  // process character c
}

如果要读取原始字节,请执行以下操作:

 char b;
while (infile.get(b))
// while(infile.read(&b, 1)   // alternative, compare and profile
{
  // process byte b
}

在任何一种情况下, infile 应该是 std::istream & 或类似类型,例如文件或 std::cin

原文由 Kerrek SB 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题