如何在C#二维数组中获取多组输入以存储并输出用户信息
如何在C#中存储并输出多组商品信息
嘿,我来帮你搞定这个问题!你的代码现在没法完整保存每组信息的核心原因是:你用的二维字符串数组string[,] items每个元素只能存单个字符串,但每组商品有名称、价格、数量三个字段,原代码里每次循环只把最后一个输入(数量)存进去,前两个输入直接丢了,输出的时候还重复用同一个元素,自然不对。
下面给你两种解决方案,推荐用第一种,更符合C#的面向对象思想~
方案一:用自定义类封装信息(推荐)
我们可以先定义一个Product类,把商品的三个属性打包在一起,这样每组信息就是一个对象,存储和读取都清晰很多。
完整代码示例
// 定义商品类,封装名称、价格、数量三个属性 public class Product { public string Name { get; set; } public decimal Price { get; set; } // 价格用decimal比float/double更靠谱,避免浮点误差 public int Quantity { get; set; } } static void Main(string[] args) { // 这里用数组存2个商品,也可以用List<Product>实现动态添加 Product[] products = new Product[2]; // 循环输入每组商品信息 for (int i = 0; i < products.Length; i++) { Console.WriteLine($"请输入第{i+1}个商品的信息:"); Console.Write("商品名称:"); string name = Console.ReadLine(); Console.Write("商品价格:"); // 实际项目里建议加输入验证,确保用户输入的是有效数字 decimal price = decimal.Parse(Console.ReadLine()); Console.Write("商品数量:"); int quantity = int.Parse(Console.ReadLine()); // 创建Product对象并存入数组 products[i] = new Product { Name = name, Price = price, Quantity = quantity }; } // 输出所有存储的商品信息 Console.WriteLine("\n=== 已存储的商品信息 ==="); foreach (var product in products) { Console.WriteLine($"商品名称:{product.Name}"); Console.WriteLine($"商品价格:{product.Price:C}"); // :C 是格式化货币的写法,会自动加货币符号 Console.WriteLine($"商品数量:{product.Quantity}"); Console.WriteLine("------------------------"); } }
为什么推荐这种方式?
- 逻辑清晰:每个商品的三个属性是绑定在一起的,不会搞混
- 扩展性强:以后要加商品分类、库存预警等属性,直接在类里加就行
- 可读性高:别人看代码一眼就能明白每个字段的含义
方案二:调整二维数组结构(不推荐,仅作参考)
如果暂时不想用类,也可以调整二维数组的维度,把每个字段作为一维,商品作为另一维。比如string[3, 2],第一维代表字段(0=名称,1=价格,2=数量),第二维代表商品序号。
代码示例
static void Main(string[] args) { // 第一维:0=名称,1=价格,2=数量;第二维:商品序号 string[,] items = new string[3, 2]; for (int i = 0; i < 2; i++) { Console.WriteLine($"请输入第{i+1}个商品的信息:"); Console.Write("商品名称:"); items[0, i] = Console.ReadLine(); Console.Write("商品价格:"); items[1, i] = Console.ReadLine(); Console.Write("商品数量:"); items[2, i] = Console.ReadLine(); } // 输出信息 Console.WriteLine("\n=== 已存储的商品信息 ==="); for (int i = 0; i < 2; i++) { Console.WriteLine($"商品名称:{items[0, i]}"); Console.WriteLine($"商品价格:{items[1, i]}"); Console.WriteLine($"商品数量:{items[2, i]}"); Console.WriteLine("------------------------"); } }
注意点
这种方式虽然能工作,但可读性差,后续维护起来很麻烦,比如要加字段就得改数组维度,所以还是优先用类的方案。
原代码的问题总结
- 内层循环里你输出了三个输入提示,但只执行了一次
Console.ReadLine(),所以前两个输入(名称、价格)直接被忽略了,只存了最后一个输入(数量) - 输出的时候,不管是名称、价格还是数量,都用同一个
items[i,j],所以内容重复且完全不对
内容的提问来源于stack exchange,提问作者gwenda burnett
相关产品推荐
相关产品推荐

