我一直在Rust程序中得到ParseIntError{kind:InvalidDigit},我不知道为什么



我正在写一篇关于python和Rust在编码挑战中的不同之处的论文。在此之前,我不得不说这是我的第一个Rust程序。如果我在做一些奇怪的事情,我很抱歉。然而,当我在Rust中循环一些输入时,我会得到以下错误:

2
4
1
2
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }', srcmain.rs:24:14

这是我的代码:

use std::fs::File;
use std::io::{Read};
use std::cmp;
fn main() {
let mut file = File::open("C:\Users\isaak\OneDrive\skewl\Fall 2019\Operating Systems\rustyboi\src\bus.txt").expect("Can't Open File");
let mut contents = String::new();
file.read_to_string(&mut contents).expect("Can't Read File");
let tokens:Vec<&str> = contents.split("n").collect();
let l1:Vec<&str> = tokens[0].split(" ").collect();
let _n = l1[0];
let w = l1[1];
//println!("{}", w);
let l2 = tokens[1].split(" ");
let mut k = 0;
let mut maxed = 0;
let mut mined = 0;
for item in l2 { // in range n
println!("{}", item);
k += item.parse::<i32>().unwrap();
maxed = cmp::max(k, maxed);
mined = cmp::min(k, mined);
}
println!("{}", cmp::max(w.parse::<i32>().unwrap() - maxed + mined.abs() + 1, 0));
}

它正在查看的文件只包含以下内容:

4 10
2 4 1 2

我不知道当打印的值肯定是一个数字时,我怎么会在for循环中的k+=部分出现错误。无论如何,如果你好奇,这里有一个编码挑战的链接:https://codeforces.com/contest/978/problem/E

Rust Playground中的工作解决方案:https://play.rust-lang.org/?version=stable&mode=调试&edition=2018&gist=ed17ea24cfcf4b45549846a5c9f1edfd

您的文件包含rn行尾("4 10rn2 4 1 2rn"(,仅用n拆分后,每行末尾都有r,因此解析失败(r无法解析为整数(。

  1. 使用lines()而不是split("n")作为跨平台解决方案
  2. 您可以使用split_whitespace()而不是split(" ")

最新更新