我正在开发一个关于Dev-C ++的小项目。我正在尝试让机器人问你一些问题,但是我不能使用带有字符串的开关状态。每次我尝试这样做都会显示错误!我也尝试将srings更改为普通的int变量,但是当我回答第一个问题后代码一次运行时!有谁知道如何解决这些问题?
这是我的代码:
// #include "stdafx";
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
string comida;
string nome;
string idade;
string pais;
cout << "Ola, o meu nome e Aleksandar. Qual e o teu nome?" << endl; //Ask for nome
cin >> nome; //Recieve variable nome
cout << "Es de que pais, " << nome << "?" << endl; //Ask for pais
cin >> pais; //Receive pais
cout << pais << " e um pais bonito. " << "Eu sou de Portugal!" << endl;
cout << "Quantos anos tens " << nome << "?" << endl; //Ask for idade
cin >> idade; //Receive variable idade
switch (idade) {
case 21:
cout << "O meu irmao tambem tem 21 anos!" << endl;
break;
}
cout << "Eu tenho 28" << endl;
cout << "Qual e a tua comida preferida?" << endl; //Ask for comida
cin >> comida; //Receive variable comida
cout << "Tambem gosto muito de " << comida << ". Mas gosto mesmo e de Vatruchka!" << endl;
cout << "Xau " << nome << "!" << endl;
}
答案 0 :(得分:1)
对于不是整数类型(整数,字符或枚举)的内容,您不能switch
,并且case-labels必须是常量值。
您需要将字符串转换为整数类型,或者需要执行if-else-if类型构造。
换句话说:
std::string s;
std::cin >> s;
if (s == "Yes")
{
std::cout << "You said yes!" << std::endl;
}
else if (s == "No")
{
std::cout << "You said no?" << std::endl;
}
else
{
std::cout << "You said something I don't understand" << std::endl;
}
答案 1 :(得分:1)
您无法使用字符串 - switch
仅适用于整数case
类型(即整数和枚举)。
你可以使用这样的东西,而不是:
if (idade == "21") { cout << "...\n"; }
else if (idade == "something else") { cout << "...\n"; }
您描述当您更改为使用整数时,代码会立即运行。您可能忘记在每个break
条款中包含case
。
答案 2 :(得分:0)
如果字符串包含数字,switch(std::stoi(idade))
将起作用。但如果idade
包含其他内容,则无效。
答案 3 :(得分:0)
如果你有一组你期望的不同字符串,那么你可以设置枚举和地图(我在这里松散地使用地图这个词 - 我不是指C ++中的实际地图,虽然我知道可以用它来做类似的事情)
使用此选项将输入转换为枚举,然后您可以在枚举
上运行开关E.g。
enum class ANSWER
{
ANSWER_1,
ANSWER_2
};
class AnswerMap \\set up this class like a singleton
{
std::vector<std::pair<std::string, ANSWER>> _answer_map = {
std::make_pair("Answer 1 string", ANSWER::ANSWER_1),
std::make_pair("Answer 2 string", ANSWER::ANSWER_2)
}
std::string String(ANSWER answer); \\have this function loop through this->_answer_map until finding the pair with the second item as the given enum and return the corresponding string
ANSWER Enum(std::string answer); \\have this function do the same as this->String but find the pair where the string matches and then return the corresponding enum
}