int、char 和字符串 cin 以及验证方法?

int, char, and string cin and validate method?

我刚刚(相当成功)在一所领先的 NCAA 第 1 分区大学完成了计算机科学入门 I 和 II,我无法告诉你我在这个网站上搜索了多少次如何接受和验证一个int 和只有一个 int,一个 char 和只有一个 char,和一个字符串和只有一个字符串?毫无疑问,有许多方法可以解决这些问题,但通常 SO 上的内容是针对特定情况的。我只是在寻找一种按上述要求工作的通用方法。我提供我的方法,我自己制定的。我无法想象没有其他类似情况的人有或确实有相同的问题。如果有其他方法可以完成这些看似次要的任务,并且 a.) 有效,并且 b) 涉及的编码比我概述的少,我很想看看它。

#include <string>
#include<iostream>
using std::cin;
using std::cout;

int main() {

  int answer1 = 0;
  cout << "An int Question?\n"
       << "1. Yes.\n"
       << "2. No.\n";
  while (!(cin >> answer1) || answer1 < 1 || answer1 > 2) {
     cin.clear();
     cin.ignore(std::numeric_limits<std::stream_size>::max(), '\n');
     cout << "Input Error!\n"
          << "An int Question?\n"
          << "1. Yes.\n"
          << "2. No!\n";
   }
   cout << "The int answer is " << answer1 << "\n\n";


 char answer2 = 'X';
 cout << "A char Question?\n"
      << "A. Yes.\n"
      << "B. No.\n";
 while (!(cin >> answer2) || !isalpha(answer2) || answer2 != 'A' && answer2 != 'B') {
     cin.clear();
     cin.ignore(std::numeric_limits<std::stream_size>::max(), '\n');
     cout << "Input Error!\n"
          << "A char Question?\n"
          << "A. Yes.\n"
          << "B. No!\n";
  }
  cout << "The char answer is " << answer2 << "\n\n";


  std::string answer3 = "";
  cout << "A string Question?\n"
       << "Yes.\n"
       << "No.\n";
  while (!(cin >> answer3) || answer3 != "Yes" && answer3 != "No") {
     cin.clear();
     cin.ignore(std::numeric_limits<std::stream_size>::max(), '\n');
     cout << "Input Error!\n"
          << "A string Question?\n"
          << "Yes.\n"
          << "No.\n";
   }
   cout << "The string answer is " << answer3 << "\n\n";
}