不在 C# 中的 switch case 中输入

Posted

技术标签:

【中文标题】不在 C# 中的 switch case 中输入【英文标题】:Not enter in a switch case in C# 【发布时间】:2019-03-06 05:12:12 【问题描述】:

switch 语句的 case 2 无法输入,不知道为什么。如果我删除 do while 循环,代码将完美运行。它与结构数组的内存有关吗?代码如下:

class Notebook 

        struct Student
        
            public String id;
            public String name;
            public void showInfo(Student x) 
                Console.WriteLine("\t ID: " + x.id);
                Console.WriteLine("\t Name: " + x.name);
            

        
        static void Main(string[] args)

            bool display = true;

            int studentNum = int.Parse(Console.ReadLine());

            Student[] students = new Student[studentNum];

            do 

                Console.Clear();
                Console.WriteLine("1.- Insert register");
                Console.WriteLine("2.- Show register");
                Console.WriteLine("3.- Exit");


                String opc = Console.ReadLine();


                switch (opc) 

                    case "1":
                        Console.Clear();
                        for(int i = 0; i < students.Length; ++i)
                            Console.WriteLine("Name of the student " + (i+1));
                            students[i].name = Console.ReadLine();
                            Console.WriteLine("ID of the student " + (i+1));
                            students[i].id = Console.ReadLine();
                        
                        break;

                    case "2":
                        Console.Clear();
                        for(int i = 0; i < students.Length; ++i)
                            students[i].showInfo(students[i]);
                        
                        break;

                    case "3":
                        Console.Clear();
                        Console.WriteLine("bye");
                        display = false;
                        break;

                

            while(display);

        
    

我认为这是 opc 字符串内存中的“某些东西”,可以避免情况 2。

【问题讨论】:

您是否尝试过使用调试器?乍一看,您的代码看起来不错,但调试器可以让您查看程序流程和变量所代表的对象的详细内容。 只是调试。你能验证一下opc == "2"吗? @vasily.sib 是的,我在设置值后写了一个 Console.WriteLine(opc) 并显示“2”,仅此而已。如果我写“3”,程序就完美结束了。 不,不要Console.WriteLine(opc)。调试并检查opc == "2"是否在即时窗口中。 @vasily.sib 我写了 if 语句,程序跳过了它。好像没写一样。 【参考方案1】:

您的问题是您在 do while 循环开始时运行的 Console.Clear 语句。注释该行,您将看到您的代码将转到case "2"

即使在您的原始代码中,它也会变成“2”,但控制台每次都会在 do while 循环开始时被清除,因此您看不到由“2”逻辑编写的语句。

没有你怀疑的内存问题。

do while 循环应该有 Console.Clear 的注释,如下面的代码所示。

 do 

            //Console.Clear();
            Console.WriteLine("1.- Insert register");
            Console.WriteLine("2.- Show register");
            Console.WriteLine("3.- Exit");

【讨论】:

效果很好!我需要更加小心我的代码。 是的,这类问题非常微妙,在编写代码时很容易出现。【参考方案2】:

添加一个 Console.ReadLine();在打破案例“2”之前。

case "2":
                    Console.Clear();
                    for (int i = 0; i < students.Length; ++i)
                    
                        students[i].showInfo(students[i]);
                    
                    Console.ReadLine();
                    break;

你写学生信息,然后调用 Console.Clear()

【讨论】:

以上是关于不在 C# 中的 switch case 中输入的主要内容,如果未能解决你的问题,请参考以下文章

在 Switch 中的 Case 语句中添加附加条件

switch case的用法

switch语句 switch语句的相关知识

C#语言基础— switch case和if的嵌套练习

c语言中case是啥意思

急急急!switch case嵌套