首页 > 解决方案 > 发送 &str 数字作为输入未通过条件检查,而硬编码相同的 &str 数字则不会 (RUST)

问题描述

您好,我正在尝试使用get_input()which 来获取用户输入,这将返回一个String. get_input()调用check_input()which 用于match检查输入String是否只有数字,并将bool根据输入返回 a。我切片String并将其存储为,即使输入值只是数字,&str我的check_input()函数也会返回。false现在,如果我硬编码 a&str并将其传递给它,match它将返回true

我正在尝试学习 Rust,并且对 lang 非常陌生(3 天前开始使用 Rust),因此非常欢迎对出了什么问题进行深入解释。请给我任何你认为需要擅长 Rust 的批评/建议。

代码:

// // use std::io;                    // to take user input
use std::io;                    // to take user input

fn main() {
//let mut grid_size = get_input().trim().parse::<i64>().unwrap();
//println!("{}", grid_size + 2 );
println!("From main ---> {:?}",checkinput());

 }

fn get_input() -> String{
// fn get_input() -> &'static str{
    println!("Please enter the grid size" );

    let mut input_string = String::new();
    std::io::stdin().read_line(&mut input_string).expect("Failed");
    return input_string;

    // let my_own_str: String = input_string.to_owned();
    // let sliced_str: &str = &my_own_str[..];

    // println!("sliced_str ---> {}\nmy_own_string ---> {}", sliced_str, my_own_str);

    // return sliced_str;

    // let my_test_str: &str = "2";
    // return my_test_str;
}

fn checkinput() -> bool{
    // match get_input().bytes().all(|c| c.is_ascii_digit()) {

    // let  test = get_input().bytes().all(|c| c.is_ascii_digit());
    // let test = get_input().chars().all(char::is_numeric);

    let test_var = get_input(); // i get a String

    let my_own_str: String = test_var.to_owned(); // i own the Strin
    let sliced_str: &str = &my_own_str[..];       // i cut Strin into str
    let sliced_str_new: &str = "123312";       // i cut Strin into str
    // let sliced_str: &str = test_var.as_str();       // i cut Strin into str
    // let sliced_str: &str = "123";       // if i put a str "123" then true

    println!("sliced_str ---> {}", sliced_str); // print to check input val
    println!("my_own_string ---> {}", my_own_str); // print to check input val
    let test = sliced_str.chars().all(char::is_numeric); // check if my str is a numeric

    println!("---------------------------------------");
    println!("Type of my_own_str");
    find_type(&my_own_str);
    println!("---------------------------------------");
    println!("Type of sliced_str");
    find_type(&sliced_str);
    println!("---------------------------------------");
    println!("Type of sliced_str_new");
    find_type(&sliced_str_new);
    println!("---------------------------------------");

    println!("TEST ---> {}", test); // print bool

    match test {
        true => return true,
        false => return false,
    }
}

fn find_type<T>(_: &T) {
    println!("{}", std::any::type_name::<T>())
}

标签: rust

解决方案


.trim()在之前添加.chars()

let test = sliced_str.trim().chars().all(char::is_numeric);

推荐阅读