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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

1918閲覧

C#の入力の例外処理がうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

1グッド

0クリップ

投稿2022/05/05 04:46

入力された数字を処理するシステムを作りたいと考えています。この時入力されたものが数字かどうかを判断し、”hoge”などの数字以外が入力されたとき-1を返して止まる例外処理を作りたいです。そのためtry_catch文を使いました。入力lineをint型にキャストし、エラーFormatExceptionを吐いたら-1を返して止まるコードを作成しました。コメントアウトされているvar line = "hoge";で試してみるとうまく作動したのですが、var line = 1;の時
「引数 1: は 'int' から 'System.ReadOnlySpan<char>' へ変換することはできません」
とエラーを吐かれ実行できません。これも引数による型違いのエラーなためFormatExceptionの例外処理で止まると考えたのですが、なぜ実行できないのでしょうか?対策を教えてください。

C#

1 //var line = Console.ReadLine(); 2 //var line = "hoge"; 3 var line = 1; 4 if (line == null) 5 { 6 Console.WriteLine(-1); 7 return; 8 } 9 try 10 { 11 int int_test = int.Parse(line);// 12 } 13 catch (FormatException) 14 { 15 Console.WriteLine(-1);//hogehoge対策 16 return; 17 }
t8KWdsEw👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/05 09:25

質問者さん、無言ですが、回答したのでそれに対するフィードバックを書いてください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメだったかを書くと、より期待するものに近い回答が出てくるかも。とにかく無言は NG です。
退会済みユーザー

退会済みユーザー

2022/05/08 01:35

「やってることがメチャクチャ」と言われて逆ギレして私の回答に低評価を付けたのかな? 議論する価値がないほどメチャクチャなコードを書いているにも関わらず、質問を読んでもらえて、かつ問題点と対策を書いてもらえたことに感謝すべきと思うけど。
guest

回答2

0

やってることがメチャクチャという感じです。

コード (var line = 1;) を拝見すると line は int 型です。なので、まず、

if (line == null)

がダメですし、さらに、

int int_test = int.Parse(line);

というのもあり得ません。

いったい何をしたいのでしょう?


【追記】

コンソール入力なんですよね。コンソールから 1 と入力すると、

var line = Console.ReadLine();

で変数 line に取得できるのは文字列で "1" です。123 入力なら "123" になります。そこをよく考えてください。

あと、パースできるか否かは Int32.Parse と try -catch でやるのではなく、Int32.TryParse メソッドを使うことをお勧めします。

Int32.TryParse メソッド
https://docs.microsoft.com/ja-jp/dotnet/api/system.int32.tryparse?view=net-6.0

投稿2022/05/05 04:54

編集2022/05/05 05:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2022/05/08 01:34

「やってることがメチャクチャ」と言われて逆ギレして低評価を付けたのかな? 議論する価値がないほどメチャクチャなコードを書いているのにも関わらず、それを読んでもらえて、かつ問題点と対策を書いてもらえたことに感謝すべきと思うけど。
guest

0

ベストアンサー

Consoleで受け取った入力をforeachで回して数字以外が入っていたら-1を返す関数を作ることで、入力の例外処理を作成しました。

C#

1var line = Console.ReadLine(); 2foreach (var t in line) 3 { 4 int test = ctoi(t); 5 if (test == -1) 6 {//数字でなかったら 7 Console.WriteLine(-1); 8 return; 9 } 10 } 11 public static int ctoi(char c) 12 { 13 switch (c) 14 { 15 case '0': return 0; 16 case '1': return 1; 17 case '2': return 2; 18 case '3': return 3; 19 case '4': return 4; 20 case '5': return 5; 21 case '6': return 6; 22 case '7': return 7; 23 case '8': return 8; 24 case '9': return 9; 25 default: return -1; 26 } 27 }

投稿2022/05/06 09:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2022/05/08 01:28 編集

普通の意味で「解決」というにはあまりにひどい内容なのでマイナス評価。" -322 " とか "+4302" とかはどうするのかな?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問