如果用户不小心输入了错误的数据类型,cin如何工作?

问题描述 投票:3回答:2

我是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一样是int0.14将在缓冲区中,因此当遇到第二个>>时,会将0分配给v2和第三个>> ]将0.14分配给v3,因为v3是类型float

请说明该想法的工作方式。

我在Lenovo Ideapad S340上使用G ++ mingw 8.2.0编译器

我是C ++的新手。我正在试验cin的功能和局限性。我想知道如果用户输入错误的数据类型,cin将如何接受输入。所以我检查了堆栈溢出并得到了:So ...

c++ user-input cin
2个回答

0
投票

当std :: cin读取无效输入时,std :: cin进入“失败状态”。无法读取更多内容,有时失败状态会导致错误或文本到终端的垃圾邮件。要退出失败状态,可以使用std :: cin.clear()函数。另外,当您使用std :: cin.clear()时,我还建议您使用std :: cin.ignore(10000,'\ n')清除cin并防止进一步的故障。

© www.soinside.com 2019 - 2024. All rights reserved.