Rust中使用match匹配用户输入字符串时报错该如何解决?
问题原因
- 缺少
std::io模块导入,直接调用io::stdin会触发未定义路径错误 read_line方法读取用户输入时,会将按下回车产生的换行符一起存入字符串,比如输入X后按回车,实际to_start的内容是"X\n"(Windows环境下是"X\r\n"),和"X"、"O"字面量完全不匹配- match表达式的待匹配值是
String类型,右侧的匹配分支是字符串字面量(&str类型),类型不匹配会直接编译报错
修复后可正常运行的代码
use std::io; // 导入io模块 fn main(){ let board: [[i32; 3]; 3] = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; println!("{:?}", board); println!("Who will start, X or O?"); let mut to_start = String::new(); io::stdin().read_line(&mut to_start).expect("An error was encountered"); // 去除首尾空白字符(包括换行、空格、回车)后再匹配 match to_start.trim() { "X" => println!("Player 1 starts"), "O" => println!("Player 2 starts"), _ => println!("Please enter a valid input"), }; }
内容的提问来源于stack exchange,提问作者Nicke7117
相关产品推荐
相关产品推荐

