Stdinから一行ずつEOFまで読み込む時気をつけること
一行一行読み込みたい場合、恐らく std::io::Stdin::readlineを使うと思う。 これは
pub fn read_line(&self, buf: &mut String) -> Result<usize>
という型を持つが、 EOFが来た時は Ok(0)
を返す 。
なので、EOFまで一行一行読んで何かしたい場合、
let mut buf = String::new();
while let Ok(bytes) = std::io::stdin().read_line(&buf) {
if bytes == 0 {
break;
}
...
}
として 戻り値が0の場合ループを終了する処理を入れる必要がある 。
私は Err()
でくるかと思ってしまいハマった。なんともな...
型を信用しすぎたというか...ドキュメント読んでなかったというか...
(本体のドキュメントにないんだもん気付かんわ!!!)