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

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

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

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

Q&A

解決済

1回答

2089閲覧

[C#] decimal.Parseでtry文が効かないんですがどうすればいいのか教えてください

ActiveTK

総合スコア32

C#

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

0グッド

0クリップ

投稿2020/06/28 05:16

##やりたいこと/実現したいこと
(C#)
入力を受け付けて
exitだった場合は終了し
数字だった場合は文字列を数字列に変換して(var型 -> decimal型)
2乗した結果を表示したい
##現状
exit以外の文字列だった場合にエラーになってしまう
-->tryが効いていない
##C#のソース(1部省略)

C#

1var re = Console.ReadLine(); 2decimal kazu = 0; 3if (re == 'exit') 4{ 5 return 0; 6} 7try 8{ 9 kazu = decimal.Parse(re); 10} 11catch (ArithmeticException er1) 12{ 13 Console.ForegroundColor = ConsoleColor.Red; 14 Console.WriteLine("エラー : 数字を入力してください"); 15 continue; 16} 17Console.WriteLine("2乗した結果は{0}です", kazu*kazu);

##エラー内容

Error

1Unhandled exception. System.FormatException: Input string was not in a correct format. 2at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)

Error

1未処理の例外。 System.FormatException:入力文字列が正しい形式ではありませんでした。 2System.Number.ThrowOverflowOrFormatException(ParsingStatusステータス、TypeCodeタイプ)

どなたかよろしくお願いいたします。

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

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

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

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

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

Zuishin

2020/06/28 05:21

try がきいていないのではなく、try を誤解しているのだと知ってください。
ActiveTK

2020/06/28 05:30

すみません。 どう誤解しているのか教えて頂けませんか?
退会済みユーザー

退会済みユーザー

2020/06/28 05:39

Microsoft のドキュメントを読みましょう。 public static decimal Parse (string s); でスローされる例外は、以下の 3 種類があります。 ArgumentNullException: s は null です。 FormatException: s が正しい形式ではありません。 OverflowException: s は、 MinValue 未満の数値か、 MaxValueより大きい数値を表します。 catch (ArithmeticException er1) とするとどうなるか考えてみてください。 考えても分からなければ下のコメント欄で聞いてください。
ActiveTK

2020/06/28 06:03

ご指摘ありがとうございます。 しかし、それでもキャッチ出来ませんでした。 ついでに現状として、 0 <= 変数.IndexOf("1"),0 <= 変数.IndexOf("2") ・・で値以外が入っていないか調べて..ということは出来ました。 しかし、catchでやってみたいので何か気が付いた点があればご指摘お願い致します。
退会済みユーザー

退会済みユーザー

2020/06/28 06:48 編集

> しかし、それでもキャッチ出来ませんでした。 「それ」って何ですか? ここに書いてないことは知り得ない第三者が読んで誤解を与えることなく分かるように書いてください。
ActiveTK

2020/06/28 06:14

catch (ArithmeticException) などの他の型です
Daregada

2020/06/28 06:19

などとは? 実際にどう書いて試したのか書かないと、正しいやり方に近づいたのに書き方にミスがあるのか、理解ができておらず明後日の方向を向いているのか区別ができないので。
退会済みユーザー

退会済みユーザー

2020/06/28 06:47 編集

> catch (ArithmeticException) などの他の型です 話が通じないですね。「他の型」とは具体的に何なのですか? ここに書いてないことは知り得ない第三者が読んで誤解を与えることなく分かるように書いてくださいとお願いしたはずですが・・・ ArgumentNullException, FormatException, OverflowException 以外はスローされないのだから、catch で捕捉できるのは何なのかわかりますか?
退会済みユーザー

退会済みユーザー

2020/06/28 06:48 編集

一度 https://teratail.com/help/question-tips を読んでください。ここに書いてないことは知り得ない第三者が読んで誤解なく分かるように質問を言語化するのはどうしたらよいか、よく考えて書いていただければと思います
ActiveTK

2020/06/28 06:27

ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/06/28 06:32

聞く気・やる気がないと理解。自分は撤退します。悪しからず
ActiveTK

2020/06/28 06:39

僕の頭で理解するには早かったみたいです。 ありがとうございました。
guest

回答1

0

ベストアンサー

try catch では、そこに記述している例外及びその下位の例外のみが捕捉されます
捕捉されない例外が出るなら、その例外を追加してやるとか、すべての例外を補足するように記述すればいいかと思われます。

try-catch - C# リファレンス | Microsoft Docs

投稿2020/06/28 06:28

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問