Rust標準入力マクロ置いとく
めちゃくちゃ投稿に間が空いてしまった、、、まぁQiitaの記事にするほどでもない内容を置くという方針なのでこっちの方にめったに投稿がないのは別に問題ないはず...ないはず
namniumと申します。はい。今回は競プロでRustのコードを書いていたら、標準入力用のマクロを副産物で作成してしまったので、ここに置いておこうと考えた次第です。
ガバコードなので「こういうのもあるんだ」程度にお願いします。
macro_rules! scan { ( $( $x:ident ),*; $t:ty ) => { let mut buf = String::new(); let mut itr = { while buf.trim().len() == 0 { buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); } buf.split_whitespace().map(|n| n.parse::<$t>().unwrap()) }; $( let $x = itr.next().unwrap(); )* }; ( $( $x:ident ),*; String ) => { let mut buf = String::new(); let mut itr = { while buf.trim().len() == 0 { buf = String::new(); std::io::stdin().read_line(&mut buf).unwrap(); } buf.split_whitespace() }; $( let $x = String::from(itr.next().unwrap()); )* }; } use std::io::prelude::*; fn print(message: &str) { print!("{}", message); std::io::stdout().flush().unwrap(); } fn main() { print("a b? "); scan!(a, b; i32); println!("{} + {} = {}", a, b, a+b); print("What's your name(fisrtname familyname) ? "); scan!(first, family; String); println!("Your name is {} {} in Japan.", family, first); }
実行結果例
$ ./main a b? 10 20 10 + 20 = 30 What's your name(fisrtname familyname) ? Taro Yamada Your name is Yamada Taro in Japan.
あー、解説とか面倒くさいのでしません。この前作ったRustテトリスでも置いておいてお茶を濁します...(記事とは全く無関係)