C++ 检查字符串和长度

C++ 检查字符串和长度,c++,std,eof,C++,Std,Eof,此代码假定只接受数字,并且数字必须正好是12个数字。第一种方法有效,但后一种方法无效。用户输入13个数字,但不显示任何错误 std::string line; double d; while (std::getline(std::cin, line)) { std::stringstream ss(line); if (ss >> d || line.size() == 12) { if

此代码假定只接受数字,并且数字必须正好是12个数字。第一种方法有效,但后一种方法无效。用户输入13个数字,但不显示任何错误

 std::string line;
    double d;
    while (std::getline(std::cin, line))
    {
        std::stringstream ss(line);
        if (ss >> d || line.size() == 12)
        {
            if (ss.eof())
            {   // Success
                break;
            }
        }

        std::cout << "Error!" << std::endl;
    }
std::字符串行;
双d;
while(std::getline(std::cin,line))
{
std::stringstream ss(线路);
如果(ss>>d | | line.size()==12)
{
if(ss.eof())
{//成功
打破
}
}

std::不能尝试而不是

if (ss >> d && line.size() == 12)

尝试而不是

if (ss >> d && line.size() == 12)

ss>>d
的返回值是多少?我猜
ss
用于链接,但这不起作用。你是对的,
ss>>d
返回
ss
@JanDvorak:是的,
ss>>d
返回
ss
,可能是。转换运算符是从
std::basic\u ios
继承的。我没有想过重载<代码>(BoL)< /Calp>运算符0io。在正常语言中,对象总是真的;-)jand Valk,一个非常方便和漂亮的C++ IMO特性。如果对象的内部状态表示它处于“坏/坏”状态。声明,然后在布尔条件下使用时,它应该计算为false。我认为这比总是将其计算为true更有意义。(
ss>>d
的返回值是多少?
ss
对于链接,我会猜测,但这不起作用。你是对的,
ss>>d
返回
ss
@JanDvorak:是的,
ss>>“<代码> SS代码>代码> >。转换操作符继承自<代码> STD::Basic SuxIO/COD>。我还没有想到重载<代码>(BoL)< /C++ >运算符0io。在正常语言中,对象总是真的;-)Jand Valk,一个非常方便和漂亮的C++ IMO特性。如果对象的内部状态表示为“breaked/bad”状态,则在布尔条件下使用时,它的计算结果应为false。我认为这比始终将其计算为true更有意义。:)