问题描述
我一直这样使用 peek(),get()
:
int main(){
std::string str;
int value{};
if(std::isdigit(std::cin.peek()))
std::cin >> value;
else
std::getline(cin,str);
std::cout << "value : " << value << '\n';
std::cout << "str: " << str << '\n';
}
许多 C++ 网站和论坛都在使用这种东西:
while(std::cin.peek() != '\n)
; do somthing
-
但是在阅读了有关 C++ 入门的说明后,我感到很困惑。据说这些函数
get(),peek()
返回的是int
而不是char
,所以我们不能将结果分配给一个字符,而是分配给一个int
。 -
据说字符先转换为
unsigned char
,然后提升为int
。
那么我该如何正确使用这些功能呢?
解决方法
所以我们不能将结果分配给一个字符,而是分配给一个整数
while(std::cin.peek() != '\n')
没有将 peek()
的结果分配给一个字符。它正在比较 char 和 int。这里 char 被隐式转换为 int 然后进行比较。感谢@M.M,这样使用更安全:while(std::cin.good() && std::cin.peek() != '\n')
https://www.learncpp.com/cpp-tutorial/implicit-type-conversion-coercion/