我在理解 std::cin.peek() 和 std::cin.get()

问题描述

我对 std::cin.peek()std::cin.get()用法很困惑,我的意思是这些版本返回 int

正如我在 C++ 入门中所读到的,我们永远不应该将这些函数的返回值分配给 char

char c = std::cin.get(); // erroneous

但在 Cppreference 上,它在示例、许多网站和包括我在内的许多程序员中都这样做了,直到我发现不这样做的逻辑。

https://en.cppreference.com/w/cpp/io/basic_istream/get

我也看到了这样的使用检查换行:

while(std::cin.peek() != '\n' )
    ;// do something

在上面的代码中我认为是可以的,因为实际上没有从 intchar 的赋值,而是一个比较,其中换行符 '\n' 首先被提升到 {{ 1}} 然后与 int 相比,我认为这不是邪恶的。

  • 如果代码没问题,那么使用 int 函数有什么意义?

  • 所以没有办法将从 std::char_traits<char>::to_int_type()peek() 返回的任何值分配给 get()?'

我看过一些推荐的代码,例如:

char
  • 那么 char c; while(std::cin.peek() != std::char_traits<char>::to_int_type('\n')){ std::cin.get(c); std::cout.put(c); } '\n' 的隐式转换和使用这个 trait 函数有什么区别?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)