字符变量作为 Y/N 问题的输入

Char variables as an input to a Y/N question

我问用户 he/she 想不想喝一杯。用户可以键入的唯一答案是 Y 表示是,N 表示否,然后出现最后的对话。我将答案设为 char: char answer; 然后添加了 if 语句。如果用户键入 YN,一切都很好。但是,无论何时用户键入 Y(+ any letter),例如 YHTY,程序仍然会接受它(N 也是如此)。我只需要一个字母的答案 YN 其他答案超出 else 对话。

这是代码:

    #include <iostream>

    using namespace std;

    int main()
    {
        char answer;

        cout << "Do you want a drink? " << endl;
        cout << "Y/N: ";
        cin >> answer;

        if(answer == 'Y' || answer == 'y'){
            cout << "Okay. I'll bring you some." << endl;
        }   else if(answer == 'N' || answer == 'n'){
            cout << "Okay suit yourself." << endl;
        }   else{
            cout << "Please type just Y/N." << endl;
        }
        return 0;
    }

由于要处理多个字符,因此必须将变量设为字符串。例如

#include <string>

    string answer;

    cout << "Do you want a drink? " << endl;
    cout << "Y/N: ";
    getline(cin, answer);
    if (answer == "Y" || answer == "y") {

getline 读取一行文本,并将其放入字符串中。

尽管这完全符合您的要求,但可能并不完全符合您的要求。假设用户键入空格键,然后键入 Y,我希望得到的处理与他们刚刚键入 Y 完全相同,但上面的代码将拒绝任何带空格的输入。输入验证总是比您想象的要难,作为初学者,真的不值得在(恕我直言)上浪费时间。

cin 将仅接受输入的第一个字母作为 answer 因为它的数据类型是 char,我在这里没有看到任何问题,它应该为您服务需要。 您可以通过以下代码查看上述声明:

    #include <iostream>

    using namespace std;

    int main()
    {
        char answer,a2;

        cout << "Do you want a drink? " << endl;
        cout << "Y/N: ";
        cin >> answer;
        cin>>a2;
        cout<<endl<<a2<<endl;

        if(answer == 'Y' || answer == 'y'){
            cout << "Okay. I'll bring you some." << endl;
        }   else if(answer == 'N' || answer == 'n'){
            cout << "Okay suit yourself." << endl;
        }   else{
            cout << "Please type just Y/N." << endl;
        }
        return 0;
    }

a2 将保留输入中的第二个字符。


但是如果你真的只想验证单个字符那么你可以将answer的数据类型更改为char[]string然后你可以先验证输入的长度然后检查值。

    #include <iostream>

    using namespace std;

    int main()
    {
        char str[3], answer;

        cout << "Do you want a drink? " << endl;
        cout << "Y/N: ";
        cin >> str;
        answer=str[0];

        if(str[1]!='[=11=]'){ // Checks if second char is not NULL char i.e. str length is not 1
            cout << "Please enter one character only." << endl;
        }   else if(answer == 'Y' || answer == 'y'){
            cout << "Okay. I'll bring you some." << endl;
        }   else if(answer == 'N' || answer == 'n'){
            cout << "Okay suit yourself." << endl;
        }   else{
            cout << "Please type just Y/N." << endl;
        }
        return 0;
    }