やりたいこと
出力した文字に続いて、入力すること。
$ ./main
Input: 〇〇〇 <◁== ここに入力
C ソースコード
main.c
# include <stdio.h>
int main(void)
{
char buf[6] = {0};
printf("Input: ");
fflush(stdout);
fgets(buf, sizeof(buf), stdin);
puts(buf);
return 0;
}
Rust ソースコード
main.rs
use std::io::{stdin, stdout, Read, Result, Write};
fn main() -> Result<()> {
let mut buf = [0; 5];
print!("Input: ");
stdout().flush().unwrap();
stdin().read_exact(&mut buf)?;
println!("{}", String::from_utf8(buf.to_vec()).unwrap_or_default());
Ok(())
}
結論
入力の直前でflushして、バッファを吐き出せばできる。
最後に
Rustでしばらく考えても分からず、一度は諦めていましたが、
Cを書いてる最中にfflush使えば、いけそうだと閃いて、成功しました。
もっと別の方法で実現する方法があれば、教えてください。