我正在尝试创建一个猜谜游戏,如果玩家猜到了许多正确的字符串之一,他将获胜。虽然switch语句在开关括号中只能使用一个字母,但是如果我将字符串放入其中它就不会起作用。
#include "stdafx.h"
#include < iostream>
using namespace std;
class Player
{
public:
void Guess();
};
void Guess()
{
char guess;
char* word1 = "Dog";
char* word2 = "Cat";
cout <<"Welcome to guess the word. Get ready..." <<endl;
cout <<"Guess the word: " <<endl;
cin >>guess;
for (int i = 0; i <= 3; i++) //give the player 3 trys at guessing
{
switch(guess)
{
case 'Dog':
cout <<"Dog is correct." <<endl;
i = 3;
break;
default:
cout <<guess <<" is incorrect." <<endl;
cin >>guess;
}
}
}
int main()
{
Guess();
char f;
cin >>f;
return 0;
}
答案 0 :(得分:3)
您不能将switch
与字符串一起使用。这是不正确的:
case 'Dog': ...
Dog
是一个多字节字符常量,而不是字符串。编译器应该发出警告。
此外,guess
是单个字符。它也需要是一个字符串。您应该使用std::string
,如下所示:
std::string guess;
cout <<"Guess the word: " <<endl;
cin >>guess;
if (guess == "Dog") ...
答案 1 :(得分:2)
在C ++中,switch语句只能比较基本数据类型,例如int
或char
。您需要使用一系列if
语句来检查整个字符串,使用等号运算符(==)表示std::string
个对象,或strcmp
表示C样式字符串。
(注意不要对C风格的字符串使用相等运算符,因为它只会比较指针值而不是字符串内容。)
答案 2 :(得分:1)
std::string
进行比较。if(...) { ... } else if(...) {...}
switch
- case
仅适用于整数类型,'Dog'
不是单个多字节字符,可以转换为{{1}但不是一个字符串。请注意,int
之类的字符串必须包含在双引号中。