【问题标题】:(C++) How to validate user input for char variables?(C++) 如何验证用户输入的字符变量?
【发布时间】:2014-02-25 21:46:14
【问题描述】:

我在比较 char 变量的用户输入时遇到问题。我想检查他们对某个问题的回答是 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;
}

【问题讨论】:

    标签: c++ validation input


    【解决方案1】:

    问题出在下面一行:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        answer 永远不是'Y' 或不是'N'

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

        你可能会提醒

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

        【讨论】:

          【解决方案4】:

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

          意味着循环直到用户输入不同于'Y'的东西不同于'N',所以当输入'Y''N'时它存在不同。

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

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

          【讨论】:

          • 你的逻辑也倒退了。应该是while ( answer != 'Y' &amp;&amp; answer != 'N' );
          • 不。您可以使用!(answer == 'Y' || answer == 'N')answer != 'Y' &amp;&amp; answer != 'N':应用布尔逻辑!
          • 当然,这是我想写的,我猜复制粘贴没有帮助
          猜你喜欢
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-08
          相关资源
          最近更新 更多