如何在C# WinForms文本框中检测空格并求和输入的数字?
解决C# WinForms婚礼开支求和问题
你的代码目前存在两个核心问题,导致无法正确实现需求:
问题分析
- 空格检测错误:你定义的
space = ""是空字符串,而非空格字符(正确应为" "),因此永远触发不了空格判断逻辑。 - 数字解析逻辑错误:逐个字符解析成整数的方式,会把多位数拆成单个数字相加(比如输入
10 20会计算成1+0+2+0=3,而非10+20=30),完全不符合“对空格分隔的开支金额求和”的需求。
正确解决方案
推荐使用字符串分割+安全解析的方案,代码简洁且能处理各种异常输入:
string expensesInput = txEntrada.Text; int totalExpenses = 0; // 按空格分割输入,自动移除空项(处理连续空格、首尾空格的情况) string[] expenseItems = expensesInput.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); foreach (string item in expenseItems) { // 安全解析数字,避免非数字输入导致程序崩溃 if (int.TryParse(item, out int amount)) { totalExpenses += amount; } else { // 可选:提示用户输入无效,比如弹出消息框 // MessageBox.Show($"无法识别金额:{item},请输入有效的整数"); } } txSortida.Text = totalExpenses.ToString();
若需修正原循环逻辑(仅作参考,不推荐)
如果一定要基于原有循环思路修改,需要先拼接完整数字再解析,同时正确检测空格:
string expenses = txEntrada.Text; int total = 0; string currentNumber = ""; for (int i = 0; i < expenses.Length; i++) { char currentChar = expenses[i]; // 检测空白字符(包括空格、制表符等,更通用) if (char.IsWhiteSpace(currentChar)) { // 遇到空格时,解析当前已拼接的数字 if (!string.IsNullOrEmpty(currentNumber)) { total += int.Parse(currentNumber); currentNumber = ""; } } else { // 非空格字符,拼接成当前数字 currentNumber += currentChar; } } // 处理循环结束后剩余的最后一个数字 if (!string.IsNullOrEmpty(currentNumber)) { total += int.Parse(currentNumber); } txSortida.Text = total.ToString();
该版本无错误处理,输入非数字会抛出异常,因此优先选择第一个方案。
内容的提问来源于stack exchange,提问作者Orifutu
相关产品推荐
相关产品推荐

