📜  如何在 C++ 中拒绝字符串输入(1)

📅  最后修改于: 2023-12-03 15:08:35.034000             🧑  作者: Mango

如何在 C++ 中拒绝字符串输入

在 C++ 中,我们经常需要从用户输入中获取数据。但是有时,我们只想接受特定类型的数据而不是字符串,这时候需要拒绝字符串输入。下面我们探讨几种做法。

使用 istream 重载运算符

istream 是一个用于输入的类,它提供了重载运算符的方法用来定义输入数据的方式。我们可以对输入字符串输入进行重载,限制用户只能输入数值类型的数据。下面是实现的代码:

#include <iostream>

using namespace std;

istream& operator >> (istream& input, int& num) {
    string str;
    input >> str;
    try {
        num = std::stoi(str);
    }
    catch (const std::invalid_argument& e) {
        input.setstate(std::ios::failbit);
    }
    return input;
}

int main() {
    int num;
    cout << "Enter a number: ";
    cin >> num;
    if (cin.fail()) {
        cout << "Invalid input." << endl;
    }
    else {
        cout << "Number entered: " << num << endl;
    }
    return 0;
}

在这个例子中,istream& operator >> (istream& input, int& num) 重载了输入运算符。首先获取用户输入的字符串,然后使用 std::stoi() 方法将其转换为整数类型的数据。 如果转换过程中发生了错误,我们使用 std::ios::failbit 标记设置输入流状态并返回。如果转换成功,我们将数据赋值给 num,并正常返回输入流对象。

main() 函数中,我们使用这个重载的运算符读取用户输入,如果输入流处于无效状态,则打印 "Invalid input.",否则打印 "Number entered: " 和输入的数值。

使用 getline() 方法读取字符串,然后进行转换

此方法与第一种方法相似,不过我们使用 getline() 方法来直接读取用户输入的字符串,而不是使用运算符进行转换。下面是实现的代码:

#include <iostream>
#include <string>

using namespace std;

bool isNumber(const string& str) {
    for (unsigned int i = 0; i < str.size(); i++) {
        if (!isdigit(str[i])) {
            return false;
        }
    }
    return true;
}

int main() {
    int num;
    string str;
    cout << "Enter a number: ";
    getline(cin, str);
    if (!isNumber(str)) {
        cout << "Invalid input." << endl;
    }
    else {
        num = std::stoi(str);
        cout << "Number entered: " << num << endl;
    }
    return 0;
}

在这个例子中,我们定义了一个 isNumber() 函数用于检测用户输入是否是数值类型的数据。该函数对输入的每个字符进行检查,如果遇到不是数字的字符,则返回 false。如果所有字符都是数字,则返回 true

main() 函数中,我们使用 getline() 方法读取字符串,然后使用 isNumber() 方法检测字符串是否合法。 如果合法,则使用 std::stoi() 方法将其转换为整数类型的数据。 如果不合法,则打印 "Invalid input."。

最后

在 C++ 中,有多种方法可以拒绝用户输入字符串。以上这两种方法应该够用了。希望可以帮到你!