© 2026 Woonggi Min ·記事 / ソース

記事一覧へ

Rust標準入出力コード分析

22. 03. 28.

ClaudeClaude Opus 4.5による翻訳

AI生成コンテンツは不正確または誤解を招く可能性があります。

Rust文法説明
use std::io;
fn main() {
    let mut b = String::new();
    io::stdin().read_line(&mut b).expect("Failed to read line");
    let b: Vec<f64> = b
        .split_whitespace()
        .map(|x| x.trim().parse().expect("Please type a number!"))
        .collect::<Vec<_>>();

    println!("{}", b[0] / b[1]);
}

上記のコードはAtCoder等の競技プログラミングサイトのa - b問題をRustで解いた結果です。かなり複雑に見えますが、ちょっとC言語で解いたバージョンを見てみましょう。

#include <stdio.h>
int main(void) {
	float a, b;
    scanf("%f %f", &a, &b);
    printf("%f\n",a/b);
}

Rustと比較すると本当にシンプルです。

では、なぜRustの場合はこんなに多くのコードを書く必要があるのでしょうか?それはエラーを防ぐためです。もしユーザーがe 2と入力した場合を考えてみましょう。Rustの場合はexpect()によってエラーを発生させて終了しますが、Cの場合は0.673556のような変な値が出力されます。

そうです...まだ何が良いのかは分かりませんが、Rust側が不便な(慣れていない)のは事実です。

Rust文法説明

let mut b = String::new(); 可変なString型の変数bを作成 io::stdin().read_line(&mut b).expect("Failed to read line"); 1行を入力として受け取り、bのアドレスに保存する let b: Vec<f64> = b.split_whitespace() まだよく分からない、後でRustをもっと勉強したら修正しよう(おそらく空白を基準に分割してVec(大体配列のようなもの)形式で保存) .map(|x| x.trim().parse().expect("Plese type a number!")) mapを使ってVec型のbの要素一つ一つをtrim()で空白を除去し(これやらなくてもいいんじゃない?)、parse()を使って数値型に変換するコードだと思うです .collect::<Vec<_>>(); 分からないーーーー

まだRust初心者なので、たくさん勉強が必要そうです。いつかRustをPythonのように使いこなせる日が来るでしょうか?

公開:22. 03. 28.
•
更新:26. 07. 14.

← AWS - 勉強するきっかけVSCode Formatter設定 →