问题描述
我对 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
在上面的代码中我认为是可以的,因为实际上没有从 int
到 char
的赋值,而是一个比较,其中换行符 '\n'
首先被提升到 {{ 1}} 然后与 int
相比,我认为这不是邪恶的。
我看过一些推荐的代码,例如:
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 (将#修改为@)