如何在Dart中读取来自stdin的控制台输入?
Dart中有scanf吗?
发布于 2021-04-06 17:03:32
从Dart 2.12开始,启用了空安全,stdin.readLineSync()现在返回String?而不是String。
这显然让很多人感到困惑。我强烈建议阅读https://dart.dev/null-safety/understanding-null-safety来理解空安全的含义。
特别是对于stdin.readLineSync(),您可以通过首先检查null来解决这个问题,对于局部变量,它会自动将String?提升为String。下面是一些示例:
// Read a line and try to parse it as an integer.
String? line = stdin.readLineSync();
if (line != null) {
int? num = int.tryParse(line); // No more error about `String?`.
if (num != null) {
// Do something with `num`...
}
}// Read lines from `stdin` until EOF is reached, storing them in a `List<String>`.
var lines = <String>[];
while (true) {
var line = stdin.readLineSync();
if (line == null) {
break;
}
lines.add(line); // No more error about `String?`.
}// Read a line. If EOF is reached, treat it as an empty string.
String line = stdin.readLineSync() ?? '';请注意,您不应该盲目地使用 do stdin.readLineSync()!。readLineSync返回一个String?是有原因的:当没有更多的输入时,它返回null。使用null assertion operator (!)是在请求运行时异常。
https://stackoverflow.com/questions/11122732
复制相似问题