【发布时间】:2009-12-05 07:54:28
【问题描述】:
标题很清楚。
char c = std::cin.peek(); // sets c equal to character in stream
我刚刚意识到也许原生类型 char 不能容纳 EOF。
谢谢, 核磁共振
【问题讨论】:
-
你能发布更多你的后期编辑循环吗?测试 eof 标志通常不是编写输入循环的最佳方法。检查
peek()(或者更常见的是get()?)的返回值通常要好得多,因为许多人错误地认为eof()将在下一次读取失败时返回true。这也意味着除了文件结尾之外,您不会检测到任何其他故障,并且可能会无限期地循环使用虚假数据。 -
你在 eof 前面做得很好,因为你在循环之前和循环结束时“窥视”,但你仍然遇到任何非 eof 错误的问题。我仍然认为如果你只是在while条件下测试
get()的返回值,它会更简单并且避免重复。使用get()意味着您不必“忽略”,只需将读取的字符直接传递给“可扩展字符数组”即可。此外,为了获得最大的可移植性,您应该使用ch = std::istream::traits_type::to_char_type( cin.get() );而不是隐式转换为 char,尽管这在大多数情况下都有效。