c++ - 在 C++ 中验证控制台输入

标签 c++

我写了下面的代码,它在有效输入的情况下有效

char input[100];
cin.getline(input, sizeof(input));
stringstream stream(input);
while (stream.rdbuf()->in_avail() != 0) {
    int n;
    stream >> n;
    numbers.push_back(n);
}

但是当我输入一些东西而不是数字时失败了。 我怎么能处理错误的输入(例如任何字母)?

最佳答案

例如:

bool is_number(const std::string& s)
{
    return !s.empty() && std::find_if(s.begin(), 
        s.end(), [](char c) { return !std::isdigit(c); }) == s.end();
}

foo() {
    char input[100];
    cin.getline(input, sizeof(input));
    stringstream stream(input);
    while (stream.rdbuf()->in_avail() != 0) {
        std::string n;
        stream >> n;
        if(is_number(n)) {
            numbers.push_back(std::stoi(n));
        }
        else {
            std::cout << "Not valid input. Provide number" << std::endl;
        }
    }
}

int main()
{
    foo();
    return 0;
}

关于c++ - 在 C++ 中验证控制台输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644554/

相关文章:

c++ - 为我在 C++ 中创建的对象声明一个变量

c++ - 为什么允许覆盖非虚函数?

c++ - 纯虚析构函数的目的是什么?

c++ - 使用指向该结构的指针访问结构变量成员的地址

c++ - std::list 和 std::for_each:我的终点在哪里?

c++ - 在 matlab 上生成具有限制的随机 vector 时出现问题

c++ - 使用索引 for 循环遍历 Unordered_map

c++ - 转发声明映射的映射类型和 C++11

c++ - 如何只运行一个应用程序实例

c++从嵌套类方法访问变量