📜  c++ cin 只接受数字 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:49.504000             🧑  作者: Mango

C++ cin 只接受数字

在C++中,cin 是一个输入流对象,用于从标准输入中获取用户输入。通常情况下,cin 可以接受任何类型的输入,但是如果你只想接收数字输入,可以通过几种方法来实现。

方法一:验证输入并忽略非数字字符

你可以通过循环验证输入并忽略非数字字符,直到接收到有效的数字输入。以下是一个示例代码片段:

#include <iostream>
#include <limits>

int main() {
    double num;
    std::cout << "请输入一个数字:";
    
    while (!(std::cin >> num)) {
        std::cin.clear();  // 清除错误状态位
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // 忽略无效输入

        std::cout << "输入无效,请重新输入一个数字:";
    }

    std::cout << "输入的数字是:" << num << std::endl;
    
    return 0;
}

在上面的代码中,我们使用std::cin >> num来尝试读取一个浮点数。如果输入不是一个数字,则std::cin的错误状态位会被设置,导致条件 !(std::cin >> num) 为真。在这种情况下,我们需要使用std::cin.clear()清除错误状态位,并使用std::cin.ignore()忽略之前的无效输入。

请注意,std::numeric_limits<std::streamsize>::max()用于指定忽略字符的最大数量,'\n'表示忽略直到换行符为止。

方法二:使用字符串输入并验证

如果你需要接受整数输入,你可以将输入读取为字符串,然后使用其他方法(如std::stoi()std::istringstream)将字符串转换为整数。以下是一个示例代码片段:

#include <iostream>
#include <string>

bool IsNumeric(const std::string& str) {
    for (char c : str) {
        if (!std::isdigit(c)) {
            return false;
        }
    }
    return true;
}

int main() {
    std::string input;
    int num;
    std::cout << "请输入一个整数:";
    
    while (true) {
        std::cin >> input;
        
        if (IsNumeric(input)) {
            num = std::stoi(input);
            break;
        } else {
            std::cout << "输入无效,请重新输入一个整数:";
        }
    }

    std::cout << "输入的整数是:" << num << std::endl;
    
    return 0;
}

上面的代码使用了std::stoi()函数将字符串转换为整数。我们还定义了一个辅助函数IsNumeric()来验证字符串是否只包含数字字符。

总结

通过验证输入并忽略非数字字符,或者将输入读取为字符串并进行验证,你可以实现仅接受数字输入的逻辑。这可以确保你的程序在处理用户输入时具有更高的鲁棒性。

希望本文对您有所帮助!