C++ 正确使用cin.fail()的方法
使用C++ 正确使用cin.fail()的方法,c++,cin,C++,Cin,使用cin.fail()的正确方法是什么 我正在制作一个程序,你需要输入一些东西。不太清楚是否需要输入数字或字符。当用户输入字符而不是数字时,控制台会发疯。如何使用cin.fail()修复此问题 或者有更好的方法吗?std::cin.fail()用于测试前面的输入是否正确 成功。然而,只使用 将流视为布尔值: if ( std::cin ) { // last input succeeded, i.e. !std::cin.fail() } if ( !std::cin ) {
cin.fail()的正确方法是什么代码>
我正在制作一个程序,你需要输入一些东西。不太清楚是否需要输入数字或字符。当用户输入字符而不是数字时,控制台会发疯。如何使用cin.fail()
修复此问题
或者有更好的方法吗?std::cin.fail()
用于测试前面的输入是否正确
成功。然而,只使用
将流视为布尔值:
if ( std::cin ) {
// last input succeeded, i.e. !std::cin.fail()
}
if ( !std::cin ) {
// last input failed, i.e. std::cin.fail()
}
在输入语法允许数字的上下文中
对于一个字符,通常的解决方法是逐行(或按顺序)读取它
其他字符串形式),并对其进行解析;如果你发现了
有一个数字,您可以使用std::istringstream
来
转换它或任何数量的其他替代品(strtol
,或
std::stoi
如果您有C++11)
但是,可以直接从数据库中提取数据
流:
cin.fail()
例如:
int main() {
int i, j = 0;
while (1) {
i++;
cin >> j;
if (cin.fail()) return 0;
cout << "Integer " << i << ": " << j << endl;
}
}
当您在上面运行短程序时,结果如下:
Integer 1: 30
Integer 2: 40
Integer 3: 50
Integer 4: 60
Integer 5: 70
Integer 6: -100
它在第六个值之后不会继续,因为它在读取第七个字后退出,因为这不是一个整数:cin.fail()
返回true
@Shumail92我目前没有它。对于这种情况,您通常会读取一个字符,然后检查它是否是数字(如果是,则转换为数字)你可以用一本好的C++书籍。但是看看:@JerryCoffin我会做相反的事情。对于初学者来说,跳过空白和在流中重新插入角色这样的事情并不明显。顺便说一句,你的问题是+1好吧,我从来不知道这是可能的。谢谢大家!@HetePerfan数字上说0是唯一的假值。是的,但在这种情况下它会起作用-我编辑了答案并添加了int main()
。这里有点问题(除了格式错误)。首先,当然,std::istream::fail()
从不返回“非零”或“零”:它返回true
或false
。其次,在给定的文本文件上,它输出所有内容,-100是一个整数,std::cin.fail()
读取后将返回false
。当输入1.2
或1,2
30 40 50 60 70 -100 Fred 99 88 77 66
Integer 1: 30
Integer 2: 40
Integer 3: 50
Integer 4: 60
Integer 5: 70
Integer 6: -100