我一直在尝试为变量赋值,然后在这个switch / case语句之外使用相同的变量和值。
它表示switch
语句之外的变量没有在本地定义,并且想知道是否可以使这个变量成为全局变量。
到目前为止,这是我的代码:
bool play;
string choice;
string guess;
int intChoice;
int intguess;
do
{
Console.WriteLine("1: New game\n2:quit");
choice = Console.ReadLine();
intChoice = Convert.ToInt32(choice);
switch (intChoice)
{
case 1:
play = true;
break;
case 2:
play = false;
break;
}
Console.WriteLine(play);
(请注意,我知道我可以使用if语句,但我想知道交换机和案例是如何工作的!)
答案 0 :(得分:7)
问题是,如果输入不是play
或1
,则不会定义2
。如果要允许,您需要确保处理所有可能的用户输入。如果用户输入4
怎么办?会发生什么?那么Quit
呢?
您有几个选择。您可以将您的开关/案例更改为if / else块,如果您没有计划大量扩展选项,那么这将是正常的:
if (intChoice == 1)
play = true;
else
play = false;
您还可以在交换机中添加default
语句,如下所示:
switch (intChoice)
{
case 1:
play = true;
break;
case 2:
play = false;
break;
default:
//Handle invalid inputs
play = false;
break;
}
Console.WriteLine(play);
这使您可以选择稍后添加更多intChoice
,而不会使其难以扩展。在这个简单的例子中有一些重复的代码。
您还可以在代码的最顶部设置bool play = false;
,以便针对每种情况对其进行初始化。
答案 1 :(得分:4)
问题是如果它通过switch语句(例如case 3 :),则可能不会分配play。要么在开始时将变量初始化为bool play = false,要么将默认大小写添加到switch语句
答案 2 :(得分:0)
除了1和2个案例之外的另一个案例,该变量尚未正确初始化。您需要的是一个默认情况下初始化变量,以防其他任何东西通过交换机。这也是使用switch ... case的好习惯。
另一个好的做法是定义变量的初始值,这样就不会发生异常。
将变量范围从本地更改为全局(如果在这种情况下,其范围是本地范围,而不是切换范围)不会更改任何内容。由于范围仅定义了预期寿命'变量。