![](/img/trans.png)
[英]Neverending while-loop in C++ that is to end when an input string == no?
[英]while-loop doesn't end in c++
因此,這只是我較大的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;
}
當我運行此部分時,當我被要求輸入inputWeekDay時,例如輸入“ g”,它告訴我“您的輸入不正確。\\ n您現在將被踢出該程序。” 錯誤,並再次詢問我,這應該是怎么回事。 但是在那之后,當我輸入例如“ m”時,它不等於weekDay,也不是while循環中的條件之一,它使我陷入了while循環中,並且再次出現錯誤。 當我輸入正確的“ weekDay”時也是如此,它仍然會給我錯誤消息。
有什么想法會導致這種情況嗎? 先感謝您。
您的條件是比較inputWeekDay
是否等於許多字符的按位與。
大概您想比較它是否等於任何字符。
您可以使用以下條件來做到這一點:
while ( inputWeekDay != 'm'
&& inputWeekDay != 't'
&& inputWeekDay != 'w'
...
但這很快就變老了。 另一種方法是在do-while
循環中使用switch
語句。
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 );
您的時間必須是這樣的:
while(inputWeekDay != 'm' && inputWeekDay != 't' && ...)
這樣您就可以真正檢查inputWeekDay
與所有給定值是否確實不同。
編輯:您可以使其變得更容易,如下所示:
std::string weekDay("mtwpfsz");
...
while (str.find(inputWeekDay)!=std::string::npos)
{
...
}
您正在對所有字符進行按位與運算,當您想要的是邏輯與時,還必須分別列出每個條件。 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'){
我認為問題在於按位與運算符(&)。 您應該使用邏輯與(&&)。
由於它們是char
,因此您可以避免循環並聲明:
const char *daysInTheWeek = "mtwpfsz";
然后:
while (strchr(daysInTheWeek, inputWeekDay) == NULL) {
// ...
}
問題是您不正確地寫了條件。 運算符&是按位與運算符。
要檢查輸入的值是否在數組的值中,最好使用標准算法std::find
例如
while ( std::find( daysInTheWeek, daysInTheWeek + 7, inputWeekDay ) == daysInTheWeek + 7 )
{
//...
}
這個循環也可以寫成
while ( std::find( std::begin( daysInTheWeek ), std:;end( daysInTheWeek ), inputWeekDay ) == std::end( daysInTheWeek ) )
{
//...
}
或者,您可以將array daysInTheWeek定義為
char daysInTheWeek[] = { "mtwpfsz" };
並使用標准的C函數strchr
例如
while ( std::strchr( daysInTheWeek, inputWeekDay ) == NULL )
{
//...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.