所以,这是我更大的c ++程序中的一小段代码。所有相关部分都包括在内。
char weekDay;
char inputWeekDay;
char daysInTheWeek[7] = { 'm','t','w','p','f','s','z' } ;
int days = 1723;
weekDay = daysInTheWeek[days%7] ;
cout << weekDay << endl ;
cin >> inputWeekDay ;
while (inputWeekDay != ('m'&'t'&'w'&'p'&'f'&'s'&'z')) {
cout << "Your input isn't one of the above.\nTry again." << endl ;
cin >> inputWeekDay ;
}
if (inputWeekDay == weekDay) {
cout << "Your input is correct." ;
}
else {
cout << "Your input isn't correct.\nYou will now get kicked out of this program." ;
return 1;
}
当我运行这部分时,当我被要求输入inputWeay时输入例如'g',它会给我'你的输入不对。\ n你现在将被踢出这个程序。'错误并再次问我,这应该是什么。但在那之后,当我键入例如'm',它不等于weekDay但不是while循环中的条件之一时,它使我保持在while循环中并且我再次得到错误。当我输入正确的'weekDay'时,它仍然会给我错误信息。
任何可能导致此问题的想法?提前谢谢。
答案 0 :(得分:3)
您的条件是比较inputWeekDay
是否等于许多字符的按位AND。
据推测,你想要比较它是否等于任何字符。
你可以用这样的条件来做到这一点:
while ( inputWeekDay != 'm'
&& inputWeekDay != 't'
&& inputWeekDay != 'w'
...
但这很快就会变老。另一种方法是在switch
循环中使用do-while
语句。
bool isValid = false;
do {
switch ( inputWeekDay ) {
case 'm':
case 't':
...
isValid = true;
break;
default:
isValid = false;
break;
}
if ( ! isValid ) {
cout << "Your input isn't one of the above.\nTry again." << endl ;
cin >> inputWeekDay ;
}
} while ( ! isValid );
答案 1 :(得分:2)
你的时间必须是:
while(inputWeekDay != 'm' && inputWeekDay != 't' && ...)
因此,您确实在检查inputWeekDay
是否与所有给定值完全不同。
编辑:您可以按照以下方式轻松完成:
std::string weekDay("mtwpfsz");
...
while (str.find(inputWeekDay)!=std::string::npos)
{
...
}
答案 2 :(得分:1)
您正在对所有字符执行按位AND操作,当您想要的是逻辑AND时,您还必须单独列出每个条件。 C ++不支持你在while语句中使用的样式。
while (inputWeekDay != ('m'&'t'&'w'&'p'&'f'&'s'&'z')) {
应该成为
while ( inputWeekDay != 'm'
&& inputWeekDay != 't'
&& inputWeekDay != 'w'
&& inputWeekDay != 'p'
&& inputWeekDay != 'f'
&& inputWeekDay != 's'
&& inputWeekDay != 'z'){
答案 3 :(得分:1)
我认为问题在于按位运算符(&amp;)。你应该使用逻辑和(&amp;&amp;)。
答案 4 :(得分:1)
由于他们是char
,你可以省去循环并宣布:
const char *daysInTheWeek = "mtwpfsz";
然后:
while (strchr(daysInTheWeek, inputWeekDay) == NULL) {
// ...
}
答案 5 :(得分:0)
问题是你写错了条件。运营商&amp;是按位AND运算符。
要检查输入的值是否为数组值,最好使用标准算法std::find
例如
while ( std::find( daysInTheWeek, daysInTheWeek + 7, inputWeekDay ) == daysInTheWeek + 7 )
{
//...
}
这个循环也可以写成
while ( std::find( std::begin( daysInTheWeek ), std:;end( daysInTheWeek ), inputWeekDay ) == std::end( daysInTheWeek ) )
{
//...
}
或者您可以将数组daysInTheWeek定义为
char daysInTheWeek[] = { "mtwpfsz" };
并使用标准C函数strchr
例如
while ( std::strchr( daysInTheWeek, inputWeekDay ) == NULL )
{
//...
}