You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:06:02