< 返回版块

Aquarian-Age 发表于 2019-11-13 20:09

代码:

use std::io;
use std::num::Wrapping;

//获取用户输入
fn get_input() -> (u32, u32, u32) {
    println!("输入十以内的任意三个数字");

    let mut inputone = String::new();
    io::stdin().read_line(&mut inputone).expect("输入错误");

    let mut inputtwo = String::new();
    io::stdin().read_line(&mut inputtwo).expect("错误的输入");

    let mut inputthree = String::new();
    io::stdin().read_line(&mut inputthree).expect("错误的输入");

    //解析字符串内容 确认落宫数字
    let _one: u32 = inputone.trim().parse::<u32>().unwrap();
    let _two: u32 = inputtwo.trim().parse::<u32>().unwrap();
    let _three: u32 = inputthree.trim().parse::<u32>().unwrap();
    return (_one, _two, _three);
}
fn qike() {
    let (one, two, three) = get_input();
    println!("输入字符解析为{},{},{}", one, two, three);

    println!("依据以上数字起课为:");
    //根据确定落宫数字来定宫
    //定一宫
    let yigong: u32 = one % 6;
    println!("one = {}", yigong);
    let ergong: Wrapping<u32> = Wrapping::<u32>(yigong + two - 7);
    println!("two = {}", ergong);
    /* let sangong: u32 = ergong + three - 7;
}

fn main() {

    qike();
}

错误信息

输入十以内的任意三个数字
1
2
3
输入字符解析为1,2,3
依据以上数字起课为:
one = 1
thread 'main' panicked at 'attempt to subtract with overflow', src/main.rs:96:49
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

这个该怎么改呢?

评论区

写评论
rdigua 2019-11-13 21:10

using i32

作者 Aquarian-Age 2019-11-13 20:54

你是对的 谢谢  对以下内容的回复:

chirsz-ever 2019-11-13 20:28

写错了,是 Wrapping(yigong) + Wrapping(two) - Wrapping(7)

chirsz-ever 2019-11-13 20:27

可能是 Wrapping::<u32>(yigong + two - 7) 改成 Wrapping(yigong) + two - 7) 吧 不过我觉得你可能需要取余或者 saturating_sub

1 共 4 条评论, 1 页