我是C ++的新手。我正在尝试cin
的功能和局限性。
我想知道如果用户输入错误的数据类型,cin
将如何进行输入。所以我检查了堆栈溢出并得到了this answer:
[当您读取整数并输入1.5时,它看到的是整数1,它停在句点,因为它不是整数的一部分。 “ .5”仍在输入中。这是您只得到整数部分的原因,也是它似乎没有第二次等待输入的原因。
要解决这个问题,您可以读取浮点数而不是整数,以便读取整个值,或者可以在读取整数后检查行上是否还有其他内容。
所以我尝试了。
#include <iostream>
int main()
{
std::cout << "Enter 4 numbers: " <<
std::endl;
int v1 = 0, v3 = 0;
float v2 = 0, v4 = 0;
std::cin >> v1 >> v2 >> v3 >> v4;
std::cout << "-> " << v1 << " " << v2 << " "
<< v3 << " " << v4 << std::endl;
return 0;
}
Enter 4 numbers:
3.14 2.718
-> 3 0.14 2 0.718
它按预期工作。但是当我尝试]]
#include <iostream> int main() { std::cout << "Enter 3 numbers: " << std::endl; int v1 = 0, v2 = 0; float v3 = 0; std::cin >> v1 >> v2 >> v3; std::cout << "-> " << v1 << " " << v2 << " " << v3 << std::endl; return 0; }
Enter 3 numbers: 3.14 -> 3 0 0
我期待
3 0 0.14
,因为3
将与v1
一样是int
,0.14
将在缓冲区中,因此当遇到第二个>>
时,会将0
分配给v2
和第三个>>
]将0.14
分配给v3
,因为v3
是类型float
。
请说明该想法的工作方式。
我在Lenovo Ideapad S340上使用G ++ mingw 8.2.0编译器
我是C ++的新手。我正在试验cin的功能和局限性。我想知道如果用户输入错误的数据类型,cin将如何接受输入。所以我检查了堆栈溢出并得到了:So ...
当std :: cin读取无效输入时,std :: cin进入“失败状态”。无法读取更多内容,有时失败状态会导致错误或文本到终端的垃圾邮件。要退出失败状态,可以使用std :: cin.clear()函数。另外,当您使用std :: cin.clear()时,我还建议您使用std :: cin.ignore(10000,'\ n')清除cin并防止进一步的故障。