我遇到了问题,这是代码:
#include <iostream>
using namespace std;
int main(){
struct signUP{
/........./
char userGENDER;
}signUP1;
cout << "Gender [m]= MALE / [f]= FEMALE: ";
while (signUP1.userGENDER != 'm' || signUP1.userGENDER != 'f'){
cin >> signUP1.userGENDER;
if (signUP1.userGENDER != 'm'){
cout << "ERROR: Failed requirements.\nTry again.\n";
} else if (signUP1.userGENDER != 'f'){
cout << "ERROR: Failed requirements.\nTry again.\n";
}
}
}
用户必须编辑注册表单,他必须通过按&#34; m&#34;来指定他的性别。对于男性,&#34; f&#34;对于女性。 如果他按下的东西不同于&#34; m&#34;或&#34; f&#34;弹出错误,他可以重试。
构建&gt;编译所有罚款,首先是&#34;性别[m] = MALE / .....:&#34; 。 我可以按下所有内容,但他并不知道我是否按&#34; f&#34; 或&#34; m&#34; ,&# 39;就像&#34;&#34; ,可能是运营商!= 时出错。 我试过==,或者!=&amp;&amp; !=,或==&amp;&amp; ==,或== || ==。
EDIT1:我也试图移动&#34; cin&lt;&lt; signUP.userGENDER;&#34; 不合时宜,或者把它放在不同的地方。
我对c ++缺乏经验,这就是我需要你帮助的原因。
答案 0 :(得分:3)
char userGENDER = 'x'; //some initial value, would work without initialization
cout << "Gender [m]= MALE / [f]= FEMALE: ";
cin >> userGENDER;
while (userGENDER != 'm' && userGENDER != 'f') {
cout << "ERROR: Failed requirements.\nTry again.\n";
cin >> userGENDER;
}
您的代码过于复杂,您似乎无法理解布尔评估的完成方式。
我们可以查看您的代码案例,即“性别!= m ||性别!= f”。 假设性别= m然后“性别!= m ||性别!= f”变为“m!= m || m!= f”,这是“假或真”,这是真的。因此,尽管输入正确,但是开始不正确的情况。避免这种情况的另一种可能性是更可控制的否定:
while (not (userGENDER == 'm' || userGENDER == 'f')) {
这更像是一个人认为:虽然性别不是男性或女性,但仍在迭代。
或者,如果你真的需要它:
bool valid_gender(const char inp){
return inp == 'm' or inp == 'f';
}
while (not valid_gender(userGENDER)) {
顺便说一句,userGENDER是一个不常见的命名。通常,使用下划线或camelcase,如user_gender或userGender。
答案 1 :(得分:2)
如果输入无效,您希望错误消息和循环,否则您想要中断:
while (true)
{
cin >> signUP1.userGENDER;
if (signUP1.userGENDER == 'm' || signUP1.userGENDER == 'f')
break;
else
cout << "ERROR: Failed requirements.\nTry again.\n";
}
答案 2 :(得分:1)
while
语句中的逻辑错误:
while (signUP1.userGENDER != 'm' || signUP1.userGENDER != 'f') ...
如果signUP1.userGENDER
为'm'
,则它不能等于'f'
,因此第二部分为真。如果signUP1.userGENDER
为'f'
,则它不等于'm'
,因此第一部分为真。
因此while()
子句始终为真。从您的代码片段中判断很难,但您可能希望在&&
子句中使用||
而不是while
。
答案 3 :(得分:0)
你在while条件下有两个问题,其中一个条件总是如此,因为char不能同时为m和f if条件相同
#include <iostream>
using namespace std;
int main(){
struct signUP{
char userGENDER;
}signUP1;
cout << "Gender [m]= MALE / [f]= FEMALE: ";
while ((signUP1.userGENDER != 'm') && (signUP1.userGENDER != 'f')){
cin >> signUP1.userGENDER;
if ((signUP1.userGENDER != 'm') && (signUP1.userGENDER != 'f')){
cout << "ERROR: Failed requirements.\nTry again.\n";
}
}
}
答案 4 :(得分:0)
我会做这样的事情
#include <string>
#include <iostream>
using std::string;
using std::cin;
using std::cout;
using std::endl;
enum Gender
{
UNDEFINED,
MALE,
FEMALE
// missing:
// - Agender
// - Androgyne
// - Androgynous
// - Bigender
// - Cis
// - Cisgender
// - Cis Female
// - Cis Male
// - Cis Man
// - Cis Woman
// - Cisgender Female
// - Cisgender Male
// - Cisgender Man
// - Cisgender Woman
// - Female to Male
// - FTM
// - Gender Fluid
// - Gender Nonconforming
// - Gender Questioning
// - Gender Variant
// - Genderqueer
// - Intersex
// - Male to Female
// - MTF
// - Neither
// - Neutrois
// - Non - binary
// - Other
// - Pangender
// - Trans
// - Trans*
// - Trans Female
// - Trans* Female
// - Trans Male
// - Trans* Male
// - Trans Man
// - Trans* Man
// - Trans Person
// - Trans* Person
// - Trans Woman
// - Trans* Woman
// - Transfeminine
// - Transgender
// - Transgender Female
// - Transgender Male
// - Transgender Man
// - Transgender Person
// - Transgender Woman
// - Transmasculine
// - Transsexual
// - Transsexual Female
// - Transsexual Male
// - Transsexual Man
// - Transsexual Person
// - Transsexual Woman
// - Two - Spirit
};
struct signUP
{
Gender userGENDER = UNDEFINED;
};
int main() {
signUP signUP1;
char input;
cout << "Gender [m]= MALE / [f]= FEMALE: ";
do
{
cin >> input;
switch (input)
{
case 'm':
signUP1.userGENDER = MALE;
cout << "male" << endl;
break;
case 'f':
signUP1.userGENDER = FEMALE;
cout << "female" << endl;
break;
default:
cout << "ERROR: Failed requirements.\nTry again.\n";
break;
}
} while (input != 'm' && input != 'f');
return 0;
}