Ink

Contents related to tech, hobby, etc

Stdinから一行ずつEOFまで読み込む時気をつけること

|

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() でくるかと思ってしまいハマった。なんともな... 型を信用しすぎたというか...ドキュメント読んでなかったというか... (本体のドキュメントにないんだもん気付かんわ!!!)

参考資料