You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决C# switch分支中未赋值局部变量's'的报错问题?

解决C#控制台程序“变量's'未赋值”错误并实现多次添加学生功能

你遇到的问题有两个核心原因:

  • 数组s是在case 1的代码块里声明的,作用域只限于这个代码块内部,case 2根本访问不到它,所以编译器直接报错“变量未赋值”。
  • 就算能访问,当前代码每次选1都会新建一个仅包含单个学生的数组,之前输入的学生信息会被覆盖,没法实现多次输入累积的需求。

解决方案

用List<Student>替代固定长度的数组,把集合声明移到循环外部,确保所有case都能访问到,同时支持动态添加学生。

修改后的完整代码

class Program
{
    static void Main(string[] args)
    {
        // 把学生集合声明在循环外,确保所有case都能访问
        List<Student> studentList = new List<Student>();
        string nume, prenume, facultate;
        int opt, varsta;
        double medieGenerala;
        
        do
        {
            Console.WriteLine("Introduceti optiunea dumneavoastra:");
            Console.WriteLine("0. Iesire");
            Console.WriteLine("1. Introduceti un nou student in catalog");
            Console.WriteLine("2. Afisati studentii din catalog");
            Console.WriteLine("3. Cautati un student dupa nume");
            
            // 加输入校验,避免非数字输入导致程序崩溃
            if (!int.TryParse(Console.ReadLine(), out opt))
            {
                Console.WriteLine("Optiune invalida! Va rugam introduceti un numar.");
                continue;
            }

            switch(opt)
            {
                case 0:
                    Environment.Exit(0);
                    break;
                case 1:
                    Console.Write("Introduceti numele studentului:- ");
                    nume = Console.ReadLine();
                    Console.Write("Introduceti prenumele studentului:- ");
                    prenume = Console.ReadLine();
                    
                    // 给年龄加输入校验
                    Console.Write("Introduceti varsta studentului:- ");
                    while (!int.TryParse(Console.ReadLine(), out varsta))
                    {
                        Console.Write("Varsta invalida! Va rugam introduceti un numar intreg:- ");
                    }
                    
                    Console.Write("Introduceti media generala a studentului:- ");
                    while (!double.TryParse(Console.ReadLine(), out medieGenerala))
                    {
                        Console.Write("Media invalida! Va rugam introduceti un numar real:- ");
                    }
                    
                    Console.Write("Introduceti facultatea la care este studentul:- ");
                    facultate = Console.ReadLine();
                    
                    // 创建新学生对象并添加到集合,保留所有输入的学生
                    studentList.Add(new Student(nume, prenume, varsta, medieGenerala, facultate));
                    Console.WriteLine("Student adaugat cu succes!");
                    break;
                case 2:
                    if (studentList.Count == 0)
                    {
                        Console.WriteLine("Nu exista studenti in catalog!");
                        break;
                    }
                    
                    Console.WriteLine("Lista studentilor:");
                    foreach(Student st in studentList)
                    {
                        // 根据Student类的属性输出信息,也可以给Student类重写ToString方法简化输出
                        Console.WriteLine($"Nume complet: {st.Nume} {st.Prenume}, Varsta: {st.Varsta}, Media: {st.MedieGenerala}, Facultate: {st.Facultate}");
                    }
                    break;
                case 3:
                    Console.WriteLine("Functia de cautare este in curs de implementare.");
                    break;
                default:
                    Console.WriteLine("Optiune invalida! Va rugam alegeti o optiune valida.");
                    break;
            }
        } while (true);
    }
}

// 配套的Student类定义(如果还未实现)
public class Student
{
    public string Nume { get; set; }
    public string Prenume { get; set; }
    public int Varsta { get; set; }
    public double MedieGenerala { get; set; }
    public string Facultate { get; set; }

    public Student(string nume, string prenume, int varsta, double medieGenerala, string facultate)
    {
        Nume = nume;
        Prenume = prenume;
        Varsta = varsta;
        MedieGenerala = medieGenerala;
        Facultate = facultate;
    }
}

关键改动说明

  1. 调整集合作用域:将List<Student>声明在do-while循环外部,确保case 1和case 2都能访问到同一个集合。
  2. 动态存储学生:每次选1时调用Add方法添加新学生,而非新建数组,实现多次输入的信息累积。
  3. 增加输入校验:避免用户输入非数字内容导致程序崩溃,提升程序健壮性。
  4. 空集合判断:选2时如果还没有输入学生,直接提示用户,避免无意义的遍历操作。

内容的提问来源于stack exchange,提问作者eag1e3yes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:19:21