我不明白为什么这不起作用

时间:2018-04-03 02:13:54

标签: c++ c++11 visual-c++

我无法弄清楚为什么这不起作用。它似乎只是跳过if语句。我收到y未初始化的错误,当我在if语句之前添加int y = 0;时它始终为零。

也许我只是在忽略一些简单的事情?这是我的代码:

// ConsoleApplication9.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>

enum MonsterType
{
	MONSTER_ORC,
	MONSTER_GOBLIN,
	MONSTER_TROLL,
	MONSTER_OGRE,
	MONSTER_SKELETON,
};

int getUser()
{
	std::cout << "Pick a door, 1 - 5 " << std::endl;
	int x;
	std::cin >> x;

	return x;
}

std::string getMonName(int y)
{
	if (y == MONSTER_ORC)
		return std::string("Orc");
	if (y == MONSTER_GOBLIN)
		return std::string("Goblin");
	if (y == MONSTER_TROLL)
		return std::string("Troll");
	if (y == MONSTER_OGRE)
		return std::string("Ogre");
	if (y == MONSTER_SKELETON)
		return std::string("Skeleton");
	else
		return std::string("???");
}

void getMon(int x)
{  	
	if (x == 1)
		int y = 0;
	if (x == 2)
		int y = 1;
	if (x == 3)
		int y = 2;
	if (x == 4)
		int y = 3;
	if (x == 5)
		int y = 4;

	std::cout << "You see a " << getMonName(y) << "\n";
}

int main()
{
	int x = getUser();
	getMon(x);

	return 0;
}

2 个答案:

答案 0 :(得分:2)

试试这个:

int y = 0; // Declare and initialize y here!

if (x == 1)
    y = 0; // No int before y
对于其他情况,

等等,以便在y范围之外看到if。我建议使用以下语法:

int y = 0;

if (x == 1)
{
    y = 0;
}

以便更清楚地确定范围。

答案 1 :(得分:1)

在getMon中,在每个可能产生问题的if语句中声明和销毁y。相反,您可以以类似的方式重写该功能。

void getMon(int x) {
  int y = (x >=1 && x<=5) ? x-1:0;
  std::cout << "You see a " << getMonName(y) << "\n";
}