Я новичок в rust и только что узнал о пользовательском вводе из командной строки, я попытался сделать эту простую программу для тестирования. Когда я запускаю его, я не получаю никаких ошибок, но даже если я ввожу «mac» или что-то еще, он ничего не печатает. Я хотел бы понять, почему это происходит, если кто-нибудь может объяснить, что я был бы очень признателен.
вот мой код:
use std::io::{stdin, stdout, Write};
fn main() {
print!("State your OS: ");
stdout().flush().expect("Flush Failed!");
let mut input_string = String::new();
stdin()
.read_line(&mut input_string)
.ok()
.expect("Failed to read line!");
if input_string == "mac" {
println!("Mac");
} else if input_string == "windows" {
println!("Windows");
} else if input_string == "linux" {
println!("Linux");
}
}
Пробовали ли вы распечатать отладочное представление ввода, чтобы увидеть, отличается ли оно от ожидаемого? println!("Input: {:?}", &input_string);
Ваша входная строка имеет символ новой строки в конце. Это указано в документации read_line()
.
Одним из возможных решений вашей проблемы было бы обрезать строку. Пример:
use std::io::{stdin, stdout, Write};
fn main() {
print!("State your OS: ");
stdout().flush().expect("Flush Failed!");
let mut input_string = String::new();
stdin()
.read_line(&mut input_string)
.ok()
.expect("Failed to read line!");
let s = input_string.trim();
if s == "mac" {
println!("Mac");
} else if s == "windows" {
println!("Windows");
} else if s == "linux" {
println!("Linux");
}
}
Существуют и другие возможные подходы к этому, но я думаю, что почти во всех случаях рекомендуется trim()
вводить данные пользователем. Обратите внимание, что ваш пользователь потенциально может ввести " mac"
, и в этом случае вы, вероятно, захотите обработать ввод как "mac"
.
На первый взгляд, вероятно, есть новая строка в
input_string
.