int main (void)
{
char n;
label0:
cout<<"Please enter a character value(C/S)\n";
cin>>n;
n = toupper(n);
if ( n!= 'C' || n!= 'S' )
{
cout<<"Please enter proper value\n";
cin.clear();
cin.ignore();
goto label0;
}
else
{
cout<<"You entered"<<n<<"\n";
}
return 0;
}
在此代码中,即使我输入c C s S
,它也会输出与输入正确值相同的输出。为什么不进行比较?
答案 0 :(得分:3)
if ( n!= 'C' || n!= 'S' )
对于世界上的每个true
,这是n
。您可能打算使用&&
。
想一想:
n == 'C'
,则自n != 'S'
,n == 'S'
,则自n != 'C'
,n == 'X'
,则自n != 'C'
,答案 1 :(得分:2)
通常,您通过了解逻辑运算符的使用方式而遇到麻烦。
条件n != 'C'
相当于!(n == 'C')
因此,代码中的if()
条件可以通过以下方式重写:
if ( !(n == 'C') || !(n == 'S') )
但是,代码中需要的条件是另一个:
if ( ! (n == 'C' || n == 'S') )
我建议以相反的顺序完成工作:
if ( n== 'C' || n== 'S' )
{
cout<<"You entered"<<n<<"\n";
}
else
{
cout<<"Please enter proper value\n";
cin.clear();
cin.ignore();
goto label0;
}
这样,如果输入的字符是c C s S,则字符是正确的,在任何其他情况下,必须输入新字符。
另一方面,goto
语句必须仅在特殊情况下使用,当程序流程变得非常内向时,一个人真的需要&#34;跳出混乱&#34; 。
但是,您的程序非常简单,并且可以使用普通的循环控制句子来实现,例如do {} while()
:
int main (void)
{
char n;
do {
cout<<"Please enter a (proper) character value(C/S)\n";
cin>>n;
n = toupper(n);
cin.clear();
cin.ignore();
} while ( ! (n == 'C' || n == 'S') );
cout<<"You entered"<<n<<"\n";
return 0;
}
现在,强制用户输入所需的字符之一:c C s S,直到输入的字符正确为止。