我在Rust程序中不断收到ParseIntError {kind:InvalidDigit},但我不知道为什么

时间:2020-04-27 21:51:39

标签: rust iterator

我正在写一篇关于python和Rust在进行编码挑战时的区别的论文。我必须以这是我有史以来第一个Rust程序作为开头。非常抱歉,如果我正在做一些奇怪的事情。但是,当我在Rust中遍历某些输入时,出现此错误:

2
4
1
2
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseIntError { kind: InvalidDigit }', src\main.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

1 个答案:

答案 0 :(得分:0)

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

您的文件包含\r\n行("4 10\r\n2 4 1 2\r\n")的结尾,并且仅按\n拆分后,每行结尾处都有\r,因此解析失败( \r无法解析为整数。

  1. 使用lines()代替split("\n")作为跨平台解决方案。
  2. 可以使用split_whitespace()代替split(" ")