1

我现在遇到的问题是我可以第一次输入随机的东西并且它工作正常,但在第二次尝试时它会输入错误的输入。例如:第一次输入国际象棋,它会说再试一次。第二次输入国际象棋它将接受国际象棋并打开检查然后将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: ";
        }
4

1 回答 1

1

您的代码将接受任何以 ac或 a s(或它们的大写字母)开头的输入。

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: ";
    }
}
于 2013-10-27T23:11:59.407 回答