字符变量作为 Y/N 问题的输入
Char variables as an input to a Y/N question
我问用户 he/she 想不想喝一杯。用户可以键入的唯一答案是 Y
表示是,N
表示否,然后出现最后的对话。我将答案设为 char
: char answer;
然后添加了 if
语句。如果用户键入 Y
或 N
,一切都很好。但是,无论何时用户键入 Y(+ any letter)
,例如 YHTY
,程序仍然会接受它(N
也是如此)。我只需要一个字母的答案 Y
或 N
其他答案超出 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;
}
我问用户 he/she 想不想喝一杯。用户可以键入的唯一答案是 Y
表示是,N
表示否,然后出现最后的对话。我将答案设为 char
: char answer;
然后添加了 if
语句。如果用户键入 Y
或 N
,一切都很好。但是,无论何时用户键入 Y(+ any letter)
,例如 YHTY
,程序仍然会接受它(N
也是如此)。我只需要一个字母的答案 Y
或 N
其他答案超出 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;
}