当用cin读取时,像123cplusplus这样的输入是如何成为有效整数的


#include<iostream>
using namespace std;
int main()
{
int val;
if(cin>>val)
cout<<"Valid Input"<<" "<<val<<endl;
else
cout<<"Invalid input"<<" "<<val<<endl;
return 0;
}

如果我给输入一个整数比如123,那么里面的条件if为true,它运行良好,如果我给出一个字符串或字符作为输入,则其他部分工作正常。但如果我给出123cplusplus这样的输入,则打印有效输入但123cpluscplus不是整数。为什么?

当我给出一个无效输入时,它打印变量"的值;val";等于0。由于val在程序中没有初始化,那么它如何在读取无效输入后获得值0?

当它在123cplusplus中读取时,它会在123中读取数字val,然后它会意识到它不再是一个数字,并将cpluscplus留在输入流中。

由于val在程序中没有初始化,那么它如何在读取无效输入后获得值0?

由于val未初始化,因此其值不确定。如果表达式产生了不确定的值,则程序的行为是未定义的(有一些例外情况不适用于此处(。在else分支中,当您将val插入到输出流时,它具有一个不确定的值。在这种情况下,程序的行为是未定义的。

将输入读取为字符串,并验证输入是否包含数字以外的任何内容,您将得到正确的结果。

std::string input;
cin >> input;
if(  std::all_of( input.begin(), input.end(), 
[]( unsigned char c ) { return std::isdigit( c ) ; } ) )
{
std::cout << "Valid Input " << input << std::endl;
}
else
{
std::cout << "Invalid input " << input << std::endl;
}

std::all_of检查谓词是否对所有元素都返回true。

最新更新