Почему эта печать не имеет значения, что я ввожу?

Я новичок в 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");
    }
}

На первый взгляд, вероятно, есть новая строка в input_string.

Caesar 10.04.2022 09:55

Пробовали ли вы распечатать отладочное представление ввода, чтобы увидеть, отличается ли оно от ожидаемого? println!("Input: {:?}", &input_string);

Locke 10.04.2022 09:56
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша входная строка имеет символ новой строки в конце. Это указано в документации 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".

Другие вопросы по теме