第二个无效响应在我的验证循环中被接受

2nd invaild response is getting accepted in my validation loop

本文关键字:循环 验证 无效 响应 我的 第二个      更新时间:2023-10-16

我现在遇到的问题是我可以第一次输入随机的东西并且它工作正常,但在第二次尝试时它会接受错误的输入。例如:第一个输入国际象棋,它会说再试一次。第二个输入国际象棋它将接受国际象棋并打开支票,然后将 h 放入存款金额,导致错误重试

case 1:
    cout << "Checking (C) or Savings (S): enter your choice" << endl;
    cin.get(choice);
    //input validation
    while(choice != 'c' && choice != 'C' && choice != 's' && choice != 'S')
    {
        cin.clear();
        cin.ignore(100, 'n');
        cout << "Invalid input.  Try again: ";
        cin.get(choice);
    }
    //deposit in checking
    if (choice == 'c' || choice == 'C')
    {
        cout << "how much are you depositing: $" << endl; //get deposit
        cin >> deposit;
        while(!(cin >> deposit)) //make sure user input is valid
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(),'n');
            cout << "Invalid input.  Try again: ";
        }

您的代码将接受以 cs(或其大写对应项)开头的任何输入。

cin.get(choice)将从流中读取第一个字符并将其存储在 choice 中,稍后您将它用作循环中的条件。

更好的方法是从流中读取整行并检查它是否等于任何正确的选择。

std::cout << "Checking (c) or Savings (s) enter your choice: ";
std::string line;
while (std::getline(std::cin, line)) {
    std::transform(std::begin(line), std::end(line), std::begin(line),
        ::tolower); // Transform line to lower case.
    if (line == "c" || line == "s") {
        break;
    } else {
        std::cout << "Invalid input. Try again: ";
    }
}