C#坐标距离计算程序异常:跳过输入行且结果随机求排查
解决你的C#三维坐标距离计算问题
嘿,作为C#新手遇到这种问题太正常了,我来帮你一步步捋清楚!
首先看你当前的代码,只写了第一个提示语句,完全没有读取用户输入的逻辑,而且变量都没初始化就准备计算——这就是为什么程序看起来“跳过输入行”(其实是执行完提示就直接结束了),如果强行往下写计算逻辑,还会因为变量未赋值得到错误甚至看似随机的数值。
修正后的完整代码
namespace CoordinateCalcMC { class Program { static void Main(string[] args) { int x1, y1, z1; int x2, y2, z2; // 读取第一组坐标,加入输入验证避免崩溃 Console.WriteLine("请输入第一个点的X坐标:"); while (!int.TryParse(Console.ReadLine(), out x1)) { Console.WriteLine("输入无效,请输入一个整数:"); } Console.WriteLine("请输入第一个点的Y坐标:"); while (!int.TryParse(Console.ReadLine(), out y1)) { Console.WriteLine("输入无效,请输入一个整数:"); } Console.WriteLine("请输入第一个点的Z坐标:"); while (!int.TryParse(Console.ReadLine(), out z1)) { Console.WriteLine("输入无效,请输入一个整数:"); } // 读取第二组坐标 Console.WriteLine("\n请输入第二个点的X坐标:"); while (!int.TryParse(Console.ReadLine(), out x2)) { Console.WriteLine("输入无效,请输入一个整数:"); } Console.WriteLine("请输入第二个点的Y坐标:"); while (!int.TryParse(Console.ReadLine(), out y2)) { Console.WriteLine("输入无效,请输入一个整数:"); } Console.WriteLine("请输入第二个点的Z坐标:"); while (!int.TryParse(Console.ReadLine(), out z2)) { Console.WriteLine("输入无效,请输入一个整数:"); } // 计算三维距离:√[(x2-x1)² + (y2-y1)² + (z2-z1)²] double xDistSquared = Math.Pow(x2 - x1, 2); double yDistSquared = Math.Pow(y2 - y1, 2); double zDistSquared = Math.Pow(z2 - z1, 2); double totalDist = Math.Sqrt(xDistSquared + yDistSquared + zDistSquared); // 输出结果,保留两位小数更直观 Console.WriteLine($"\n两个点之间的距离是:{totalDist:F2}"); } } }
关键知识点解释
- 读取输入的正确方式:必须用
Console.ReadLine()获取用户输入,再用int.TryParse()转换成整数——这个方法还能自动验证输入是否有效,避免用户输入非数字导致程序直接崩溃。 - 变量初始化规则:C#的局部变量必须赋值后才能使用,否则会触发编译错误。我这里用
out参数直接在TryParse里给变量赋值,就不用提前手动初始化了。 - 三维距离公式:正确的计算逻辑是先算每个轴差值的平方,求和后再开平方根。因为结果大概率是小数,所以要用
double类型存储结果,不能用int(会直接丢失小数部分)。 - 用户体验优化:加入循环验证输入,当用户输错时会提示重新输入,比直接报错友好很多。
这样修改后,程序就能正常接收你的坐标输入,并且计算出准确的三维距离啦!
内容的提问来源于stack exchange,提问作者Knotwood
相关产品推荐
相关产品推荐

