控制台应用中如何在运行时将用户输入保存到array中?
解决Switch Case中输入数据丢失的问题
问题根源在于你在case 2内部定义的firstName、lastName、mobileNo都是局部变量,一旦跳出这个case,这些变量就会被销毁,数据自然丢失。要在程序运行期间保留数据,需要把存储数据的数组(或对象)放在switch语句的外层作用域中。
步骤1:定义联系人数据结构(可选但更规范)
用类封装联系人信息,比单独的字符串/整数数组更易维护:
public class Contact { public string FirstName { get; set; } public string LastName { get; set; } public int MobileNo { get; set; } }
步骤2:在外层声明数组和计数变量
在switch所在的方法(比如Main方法)开头,声明存储联系人的数组和记录已保存数量的变量:
// 初始化数组,假设最多存储100个联系人,可按需调整大小 Contact[] contacts = new Contact[100]; int contactCount = 0; // 记录已添加的联系人数量
步骤3:修改Case 2的代码,将输入存入数组
把输入的联系人信息存入外层数组,而非仅用局部变量:
case 2: Console.WriteLine("Enter first name:"); string firstName = Console.ReadLine(); Console.WriteLine("Enter last name:"); string lastName = Console.ReadLine(); Console.WriteLine("Enter your phone number:"); // 用TryParse避免输入非数字时程序崩溃 if (int.TryParse(Console.ReadLine(), out int mobileNo)) { // 创建联系人对象并存入数组 contacts[contactCount] = new Contact { FirstName = firstName, LastName = lastName, MobileNo = mobileNo }; contactCount++; Console.WriteLine($"{firstName}, {lastName}, {mobileNo}"); } else { Console.WriteLine("电话号码格式错误,请输入有效整数。"); } break;
步骤4:添加查看联系人的Case(可选)
可以加一个case验证数据是否被保留:
case 3: Console.WriteLine("已保存的联系人:"); for (int i = 0; i < contactCount; i++) { var contact = contacts[i]; Console.WriteLine($"{i+1}. {contact.FirstName}, {contact.LastName}, {contact.MobileNo}"); } break;
关键说明
- 外层作用域的数组
contacts和contactCount在整个程序运行期间都会存在,所有case都能访问和修改它们,因此输入的数据不会丢失。 - 如果需要动态扩容数组(比如超过100个联系人),可以手动实现数组复制:
if (contactCount == contacts.Length) { // 扩容为原来的2倍 Array.Resize(ref contacts, contacts.Length * 2); }
内容的提问来源于stack exchange,提问作者thehelaeper67
相关产品推荐
相关产品推荐

