Я продолжаю получать ParseIntError {kind: InvalidDi git} в моей программе Rust, и я понятия не имею, почему - PullRequest
0 голосов
/ 28 апреля 2020

Я пишу статью о том, как 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

Я не уверен, как я мог получить эту ошибку в части k + = в for для l oop, когда напечатанное значение определенно является числом. В любом случае, вот ссылка на проблему кодирования, если вам интересно: https://codeforces.com/contest/978/problem/E

1 Ответ

0 голосов
/ 28 апреля 2020

Рабочий раствор в 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(" ").
...