Dart用户输入转换报错:空字符串处理问题求助
解决Dart用户输入转换的报错问题
原代码的核心错误
- 赋值运算符误用:代码里的
strNum == "0"是相等比较操作,而非赋值,导致空字符串的处理完全未生效,应改为strNum = "0"。 - 未处理null输入:
stdin.readLineSync()可能返回null(比如用户按下Ctrl+D/Ctrl+Z触发EOF),直接用!强制拆分会触发空指针异常。 - 未处理非数字输入:
int.parse遇到非数字字符串会抛出FormatException,int.tryParse会返回null,直接加!强制拆分会触发空指针。
修正后的完整代码
import 'dart:io'; void main() { print("Enter a number: "); String? strNum = stdin.readLineSync(); // 统一处理null或空字符串的情况 if (strNum == null || strNum.isEmpty) { strNum = "0"; } // 安全转换数字,处理非有效数字输入 int? num = int.tryParse(strNum); if (num == null) { print("输入不是有效的数字,默认使用0"); num = 0; } int result = num + 10; print("The result is $result"); }
代码说明
- 导入
dart:io模块:这是使用stdin的必要前提,原代码可能遗漏了这一行。 - 空值/空字符串处理:先判断输入是否为
null或空字符串,统一设置为默认值"0"。 - 安全数字转换:用
int.tryParse替代int.parse,转换失败时返回null,此时给默认值0并提示用户。 - 避免强制拆包:全程不使用
!强制拆包,消除空指针和格式异常的风险。
原报错原因解析
- 第一段代码的
FormatException:因为空字符串未被正确赋值为"0",int.parse("")无法解析空字符串,抛出格式异常。 - 第二段代码的空指针异常:如果
stdin.readLineSync()返回null,strNum!强制拆包会触发空指针;同时int.tryParse(null)返回null,后续的!也会触发空指针。
内容的提问来源于stack exchange,提问作者Twisha Solgama
相关产品推荐
相关产品推荐

