Dart中使用stdin输入为int/double变量赋值时报错如何解决?
错误产生原因
- Dart 2.12及以上版本默认开启空安全机制,
stdin.readLineSync()用于读取控制台输入,返回值为String?可空类型:当输入流读取失败、用户无输入时会返回null。 int.parse()方法要求传入的参数必须为非空String类型,直接将可能为null的String?类型值传入,不符合类型校验规则,因此触发编译错误。- 原代码中还残留了无用的
enter code here片段,也需要清理。
修复方法
方案1:简单修复(确认输入一定有效的场景)
使用空断言操作符!明确告知编译器该返回值一定不为空,同时补充导入dart:io库(使用stdin必须导入该库),代码如下:
import 'dart:io'; void main() { var a,b; print("Enter the value of a & b : "); a = int.parse(stdin.readLineSync()!); b = int.parse(stdin.readLineSync()!); print("Addition: ${a+b}"); print("Subtraction: ${a-b}"); print("Multiplication: ${a*b}"); print("Division: ${a/b}"); print("Mod: ${a%b}"); }
注意:如果实际运行时readLineSync()返回了null,使用!会触发运行时空错误。
方案2:增加校验的稳健实现
对输入为空、输入不是合法整数的场景做兼容处理,避免运行时崩溃:
import 'dart:io'; void main() { print("Enter the value of a & b : "); // 读取并校验a的值 String? aInput = stdin.readLineSync(); if(aInput == null || int.tryParse(aInput) == null) { print("a的输入不合法,请输入整数"); return; } int a = int.parse(aInput); // 读取并校验b的值 String? bInput = stdin.readLineSync(); if(bInput == null || int.tryParse(bInput) == null) { print("b的输入不合法,请输入整数"); return; } int b = int.parse(bInput); print("Addition: ${a+b}"); print("Subtraction: ${a-b}"); print("Multiplication: ${a*b}"); print("Division: ${a/b}"); print("Mod: ${a%b}"); }
内容的提问来源于stack exchange,提问作者Baasith Fazil
相关产品推荐
相关产品推荐

