首页 > 解决方案 > 如何使用 cin.fail() 在 C++ 中验证字符串?

问题描述

我正在尝试验证应该是字符串的输入是否作为字母字符串而不是数字输入。这是我所拥有的:

    // Manufacturer
    cout << "Enter the manufacturer: " << endl;
    string newManufacturer;
    cin >> newManufacturer;
    while (cin.fail()) {
        cout << "Error! Invalid input." << endl;
        cout << "Enter the manufacturer: " << endl;
        cin.clear();
        cin.ignore(256, '\n');
        cin >> newManufacturer;
    }
    obj1.setManufacturer(newManufacturer);

标签: c++

解决方案


我建议您使用以下代码:

#include <iostream>
#include <string>
#include <cctype>

int main()
{
    std::string newManufacturer;

    for (;;) //infinite loop
    {
        //prompt user for input
        std::cout << "Enter the manufacturer: " << std::flush;
        std::cin >> newManufacturer;

        //fall through to label "input_invalid" if stream extraction failed
        if ( !std::cin.fail() )
        {
            //verify that input consists completely of letters
            for ( char &c : newManufacturer )
            {
                if ( !std::isalpha( c ) )
                    goto input_invalid;
            }
            break;
        }

    input_invalid:
        //print error message and prepare stream for next input attempt
        std::cout << "Error! Invalid input." << std::endl;
        std::cin.clear();
        std::cin.ignore( 256, '\n' );
    }

    std::cout << "The input is valid." << std::endl;

    //do something with the input
}

goto通常,如果可以避免使用语句,则不应使用它们。但是,我认为没有办法避免它,而不会导致大量的代码重复。


推荐阅读