質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

1回答

676閲覧

Rustで入力エラーを作りたいけど無限ループになってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2022/10/27 06:24

前提

Rustでポートフォリオを作成するために「RPG風の恐怖のすごろく」って言うものを作っていたのですが数値以外を入力された時にエラー文を出して再入力をしようとしています。(今はその前提としてとりあえず入力したものを出力しようとしています)

実現したいこと

・文字列が入力されたらエラー文を出し再入力をする。

発生している問題・エラーメッセージ

なし

該当のソースコード

Rust

1use std::io; 2//use rand::Rng; 3 4fn main() { 5 //let mut rug = rand::thread_rng(); 6 println!("RPG風恐怖のすごろくを始めます。\n50目マスまで行くとクリアです。\nHPは20あります。0にならないように注意してください。\n"); 7 let num = num_input("進むマス数を入力してください。(最大10)".to_string()); 8 9 println!("{}", num); 10} 11 12fn num_input(mut ward: String) -> i32{ 13 println!("{}", ward); 14 loop { 15 io::stdin().read_line(&mut ward).expect("数値入力エラー"); 16 match ward.parse::<i32>() { 17 Ok(n) => { 18 return ward.trim().parse().expect("数値変換エラー"); 19 } 20 Err(err) => { 21 eprintln!("正しい数値を入力してください"); 22 continue 23 } 24 } 25 } 26}

試したこと

調べてコピーして、その繰り返しをしました。
数値を入力してもエラー文を出力して無限ループしています。

補足情報(FW/ツールのバージョンなど)

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

read_line メソッド はバッファに「追加」します。 つまりこの場合は「進むマス数を~~」という文字列の後ろに入力された内容が追加されているのでそれを適切にパースすることができません。

プログラムの構造を変えずに期待通り動かしたいのであれば ward の内容を消す処理 (たとえば clear メソッド を呼ぶなど) を入れるとよいでしょう。

ただ、根本的にはプロンプトと入力バッファを共用する設計が不自然ですので改めるべきでしょう。 実際にやろうとしていることから問題点の部分を抜き出しているために変になっているだけならよいのですが……。

投稿2022/10/27 07:43

SaitoAtsushi

総合スコア5437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問