(C++)如何验证 char 变量的用户输入

(C++) How to validate user input for char variables?

本文关键字:变量 用户 输入 char C++ 何验证 验证      更新时间:2023-10-16

我在比较字符变量的用户输入时遇到问题。我想检查他们对问题的回答是 Y 还是 N。如果他们没有输入 Y 或 N,我想给用户一条错误消息并重新开始循环。

下面是我创建的测试代码,作为我打算使用它的程序的模板。无论用户给出什么输入,程序都会循环。此外,如果用户输入"n"个字符,他们每次都会收到"n"失败!"消息以及初始 cout 消息。如果他们输入 Y,它也会发生,当然它说"成功!

我在网上环顾四周,但还没有找到解决这个问题的人。为什么 == 适用于等效性检查,而 != 不适用于字符(以及字符串)?

#include<iostream>
using namespace std;
int main()
{
    char answer;
    do{
        cout <<"nPlease type Y or N." << endl;
        cin >> answer;
        if ((answer == 'Y') || (answer == 'N'))
        {
            cout << "nSuccess!" << endl;
        }
        else
        {
            cout << "nFailure!" << endl;
        }
    }while ((answer != 'Y') || (answer != 'N'));
    return 0;
}

问题出在以下行:

while ((answer != 'Y') || (answer != 'N'));

这些条件中的任何一个始终为真,并且您正在应用逻辑 OR,因此您永远无法摆脱此循环。您需要按如下方式更改此设置:

while (answer != 'Y' && answer != 'N') 

你误用了布尔的逻辑:析取的否定不是在保持析取的同时对项的否定。相反,您需要否定这些术语并使用连词。

answer将始终不'Y'或不'N'

((answer != 'Y') || (answer != 'N'))

你可能

((answer != 'Y') && (answer != 'N'))

((answer != 'Y') || (answer != 'N'));

意味着循环,直到用户输入与'Y'不同或与'N'不同的内容,因此当输入'Y''N'时它就存在,因为当然,它们是不同的。

你应该像下面的代码块一样循环:

do {
  // code
} while ( answer == 'Y' && answer == 'N' );