2016-03-15 44 views
0

我刚刚完成(相当成功)在计算机科学一和二在一个领先的NCAA Division 1大学介绍了专门用C++教的,我不能告诉你有多少次我搜索这个网站如何接受和验证一个int一个int,一个字符,只有一个字符,一个字符串,只有一个字符串?毫无疑问,对于这些问题有很多方法,但通常情况下SO的具体情况非常特殊。我只是在寻找一种按照上面的要求工作的通用方法。我提供我的方法,我自己制定了。我无法想象没有其他类似的位置确实存在相同的问题。如果还有其他方法可以完成a)工作的这些看起来较小的任务,并且b)涉及的编码比我所概述的要少,那么我会很乐意看到它。int,char和string cin和验证方法?

+0

这看起来太宽泛了。有一百万种方法可以做到这一点。 – yellowantphil

回答

0
#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"; 
} 
+0

为什么使用256来调用'ignore'?你应该使用'std :: numeric_limits :: max()' – NathanOliver

+0

@Nathan:谢谢,你是对的,除此之外,我通常只关注那些更新的C++,并且增加了一些复杂。 – Chris

+0

答案应该是给大家的。如果增加了一个额外的东西,它可能不得不查找,如果它使代码更脆弱? – NathanOliver