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

How to do input validation simply in C++?

本文关键字:C++ 验证 输入 何简单 简单      更新时间:2023-10-16

如果输入既不是字符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. ....

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

是错误的。 ('c' || 'h')只是简单地评估为 true .内置operator||采用两个bool参数:

bool operator||(bool, bool)

而且由于'c''h'都不是NUL字符,因此它们转换为true .
truetrue true。该语言不会创建一些神奇的实体,您可以使用这些实体进行operator==/operator!= 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')

这只是德摩根定律。

<小时 />

如何在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'
}
你可以

试试

switch(your_guess){
    case 'c' :          
    case 'h'  :
       // do something
       break; 
    default : 
      cout<<"invalid Input"<<endl;
       break; 
}

如果你在 c++ 中做一个错误消息,除了改变之外,你可能还需要考虑使用 cerr 而不是 cout:

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

到其他答案中列出的正确形式之一