首页 > 解决方案 > C ++验证用户输入是单个字符

问题描述

optionTest 是一个字符串,而 option 是一个字符。当我输入“ee e”之类的内容时,就会出现问题。尽管我忽略/清除了最后一个“e”。只要输入不是单个字符,我就希望验证循环运行。

    cin >> optionTest;

    while (optionTest.length() != 1) {
        cout << "Invalid input. please try again." << endl;
        cin.ignore();
        cin.clear();
        //receive option
        cin >> optionTest;
    }

    option = optionTest[0];

标签: c++

解决方案


来自std::basic_istream::ignore()的描述

basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

它从流中提取字符并丢弃它们,直到发生以下任何一种情况:

count字符被提取。count在等于的特殊情况下禁用此测试std::numeric_limits<std::streamsize>::max()

由于您使用空括号调用它,count因此为 1,因此仅提取一个字符(在您的情况下为空格字符)。

尝试cin.ignore(std::numeric_limits<std::streamsize>::max())(或至少任何足够大的数字)。


推荐阅读