如何在C ++中简单地进行输入验证?

时间:2016-02-21 17:45:23

标签: c++ validation input

如果输入既不是字符c也不是h,我想给出错误消息,但我无法让它工作!我查了一些其他答案,但他们大多使用我根本不理解的throw / catch方法。我刚开始编程和错误处理在第20章或第21章。尽可能以最简单的方式帮助我。

这是我尝试过的:

cout << "Enter 'c'(even) or 'h'(odd): ";
cin >> your_guess;

if((your_guess != ('c' || 'h')) == false) {
    cout << "Wrong Input. Game is restarting... " << endl;
    // restart the game ...                         
}

但它总是说Wrong Input. ...

3 个答案:

答案 0 :(得分:6)

(your_guess != ('c' || 'h')) == false

错了。 ('c' || 'h')只评估为true built-in operator||需要两个bool个参数:

bool operator||(bool, bool)

由于'c''h'都不是NUL个字符,因此会转换为true
truetruetrue。该语言不会创建一些魔法实体,您可以operator== / operator!=char一起查看该角色是否属于您的#&# 39;已列出。

然后,稍后将bool和char提升为int以进行不等式检查。我猜your_guess不等于1。我不是'1'(ASCII 49),而是1(ASCII 1)。所以你已经有效地写了if(true) ...

你的意思是:

(your_guess != 'c' || your_guess != 'h') == false

!(your_guess != 'c' || your_guess != 'h')

your_guess == 'c' && your_guess == 'h' // your_guess equal 'c' and 'h' at once?

现在您看到逻辑错误

条件的正确代码是以下其中之一:

your_guess != 'c' && your_guess != 'h'
!(your_guess == 'c' || your_guess == 'h')

它只是De Morgan's laws

如何在C ++中完成输入验证?

如果以上内容对您来说并不简单,您可以使用switch(因为您可能仍会使用它)。但是每个case测试变量对编译时常量。

如果您要检查的字母存储在变量中,我建议:

std::string valid_characters = "ch"; // this will be our "magical entity"

if(valid_characters.find(your_guess) == std::string::npos)
{
    // you have entered a character that is not 'c' nor 'h'
}

答案 1 :(得分:1)

你可以尝试

switch(your_guess){
    case 'c' :          
    case 'h'  :
       // do something
       break; 

    default : 
      cout<<"invalid Input"<<endl;
       break; 
}

答案 2 :(得分:0)

如果您在c ++中执行错误消息,除了更改之外,您可能需要考虑使用cerr而不是cout:

your_guess!=('c'||'h'))==false

到其他答案中列出的正确表格之一