Rust: выводить символ за символом - PullRequest
1 голос
/ 22 декабря 2019

Задача это распечатать текст строки на терминал, символ за символом, используя Rust.

Вот мой код:

use std::time::Duration;
use std::thread::sleep;

fn main() {
    let string = "You are the Semicolon to my Statements.";

    for c in string.chars() {
        print!("{}", c);
        sleep(Duration::from_millis(100));
    }

    println!();
}

При запуске моего кода,строка только печатает на терминал после завершения цикла.

Как я могу напечатать символ строки за символом?

PS Вот рабочий пример в Python 3:

import time

string = "You are the Semicolon to my Statements."

for i in string:
    print(i, end='', flush=True)
    time.sleep(0.1)

print()

Ответы [ 2 ]

2 голосов
/ 23 декабря 2019

Я бы, наверное, пошел с более функциональным и / или идиоматическим Rust:

fn main() {
    let test = "Test";

    test.chars()
        .for_each(|c| print!("{}", c));
}

Я не экспериментировал с flush(), но если вам это действительно нужно, вы можете добавить его и протестироватьс ним:

use std::io::stdout;
use std::io::Write; 

fn main() {
    let test = "Test";

    test.chars()
        .for_each(|c|  {
            print!("{}", c);
            stdout().flush(); // this is a Result and should be handled properly
        });
}
2 голосов
/ 22 декабря 2019

Вам нужно найти как flush в ржавчине, ваш код должен выглядеть следующим образом

use std::time::Duration;
use std::thread::sleep;
use std::io::stdout;
use std::io::Write;

#[allow(unused_must_use)]
fn main() {

   let string = "You are the Semicolon to my Statements.";

   for c in string.chars() {
      print!("{}", c);
      stdout().flush();
      sleep(Duration::from_millis(10));
   };

   println!();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...