嵌套开关语句不访问内部开关用例c#
我在程序中使用嵌套的switch语句。出于某种原因,内部switch语句似乎不起作用 预期行为:启动程序后,向用户提供5个选项<代码>A:科目,B:学生,C:入学,D:成绩_记录E:退出。在这些选项中,A、B、C和D包含更多的开关语句。让我们以案例嵌套开关语句不访问内部开关用例c#,c#,nested,switch-statement,C#,Nested,Switch Statement,我在程序中使用嵌套的switch语句。出于某种原因,内部switch语句似乎不起作用 预期行为:启动程序后,向用户提供5个选项A:科目,B:学生,C:入学,D:成绩_记录E:退出。在这些选项中,A、B、C和D包含更多的开关语句。让我们以案例A:SUBJECTS为例。一旦选择了案例A,用户将看到另外3个选项A:添加主题,B:编辑主题,C:删除主题。然后,用户选择其中一个选项,然后执行一些代码。例如,假设用户选择一个主题,他将完成向主题池添加主题的过程 实际行为:启动程序后,会显示初始提示A:科目,
A:SUBJECTS
为例。一旦选择了案例A,用户将看到另外3个选项<代码>A:添加主题,B:编辑主题,C:删除主题。然后,用户选择其中一个选项,然后执行一些代码。例如,假设用户选择一个主题,他将完成向主题池添加主题的过程
实际行为:启动程序后,会显示初始提示A:科目,B:学生,C:报名,D:成绩_记录E:退出
,提示用户选择案例。用户选择案例后,将显示与所选选项相关的第二个提示。例如,如果用户在初始提示下选择了A,则显示的第二个提示是A:添加主题,B:编辑主题,C:删除主题
。太好了,这就是我想要的。但问题是。当用户现在选择一个选项时,无论选择了什么选项,程序都会像选择了ADD_SUBJECT
案例一样运行,并检查该选项的代码。这是针对父案例的A:SUBJECTS
。至于其余的家长案例,会显示相关的子案例提示,但子案例的任何输入/选择都会导致初始提示A:科目,B:学生,C:入学,D:成绩(u记录E:退出
),在显示时,它根本不会访问任何内部案例
请参考以下代码:
static void Main(string[] args)
{
Console.Title = "Students Record";
LoadJson();
Run();
}
static void Run()
{
while (true)
{
var consoleInput = ReadFromConsole(MainPrompt);
if (string.IsNullOrWhiteSpace(consoleInput)) continue;
Execute(consoleInput);
}
}
public static string ReadFromConsole(string prompt)
{
Console.Write(prompt);
return Console.ReadLine();
}
static void Execute(string userChoice)
{
switch(userChoice.ToUpper())
{
case A:
{
ReadFromConsole(SubjectPrompt);
switch (userChoice.ToUpper())
{
case "A"/*ADD_SUBJECT*/:
{
AddSubject();
break;
}
case "B"/*EDIT_SUBJECT*/:
{
Console.WriteLine("edit subject");
break;
}
case "C"/*DELETE_SUBJECT*/:
{
Console.WriteLine("delete subject");
break;
}
}
break;
}
case B:/*{some code}*/
case C:/*{some code}*/
case D:/*{some code}*/
case E:/*{some code}*/
}
}
案例B、C和D的格式相同
有人知道为什么对于父案例A,不管选择了什么案例,它总是提示添加主题,而对于其他父案例,它只显示初始提示
提前感谢方法
ReadFromConsole
返回字符串
,但您没有将其分配给userChoice
,后者在输入方法时保持其值
case "A":
{
userChoice = ReadFromConsole("Subject");
switch (userChoice.ToUpper())
case "A"/*ADD_SUBJECT*/:
{
AddSubject();
break;
}
case "B"/*EDIT_SUBJECT*/:
{
Console.WriteLine("edit subject");
break;
}
case "C"/*DELETE_SUBJECT*/:
{
Console.WriteLine("delete subject");
break;
}
}
break;
}
方法
ReadFromConsole
返回一个字符串
,但您没有将其分配给userChoice
,后者在输入方法时保持其值
case "A":
{
userChoice = ReadFromConsole("Subject");
switch (userChoice.ToUpper())
case "A"/*ADD_SUBJECT*/:
{
AddSubject();
break;
}
case "B"/*EDIT_SUBJECT*/:
{
Console.WriteLine("edit subject");
break;
}
case "C"/*DELETE_SUBJECT*/:
{
Console.WriteLine("delete subject");
break;
}
}
break;
}
变量userChoice在第二个switch语句中仍然等于“A”,只需删除其值或创建一个新变量并将该新值传递给第二个开关:
...
var newInput = ReadFromConsole(SubjectPrompt);
switch (newInput.ToUpper())
{
...
}
变量userChoice在第二个switch语句中仍然等于“A”,只需删除其值或创建一个新变量并将该新值传递给第二个开关:
...
var newInput = ReadFromConsole(SubjectPrompt);
switch (newInput.ToUpper())
{
...
}
它将使用
案例A:
编译。什么是A
这里您必须使用userChoice=ReadFromConsole(“主题”)代码>在案例A中:
。假设您的案例A
只是打字错误,您可以对两个开关都使用userChoice.ToUpper()
,这意味着总是“A”
,end.1。什么ReadFromConsole(SubjectPrompt)代码>是什么?可能卡住了吗?2-如果用户选择的是“A”,那么“B”、“C”就没有意义了。。。在第二个开关中。@sujith karivelil代码编译,父案例A是主题
,父案例A的子案例A是添加主题
。但是,即使我选择了B(父案例A的子案例),即EDIT\u SUBJECT
,它也会执行ADD\u SUBJECT
的代码。它会使用案例A:
进行编译吗。什么是A
这里您必须使用userChoice=ReadFromConsole(“主题”)代码>在案例A中:
。假设您的案例A
只是打字错误,您可以对两个开关都使用userChoice.ToUpper()
,这意味着总是“A”
,end.1。什么ReadFromConsole(SubjectPrompt)代码>是什么?可能卡住了吗?2-如果用户选择的是“A”,那么“B”、“C”就没有意义了。。。在第二个开关中。@sujith karivelil代码编译,父案例A是主题
,父案例A的子案例A是添加主题
。但即使我选择了B(父案例A的子案例),即EDIT\u SUBJECT
,它也会执行ADD\u SUBJECT
的代码。