##やりたいこと/実現したいこと
(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タイプ)
どなたかよろしくお願いいたします。
try がきいていないのではなく、try を誤解しているのだと知ってください。
すみません。
どう誤解しているのか教えて頂けませんか?
Microsoft のドキュメントを読みましょう。
public static decimal Parse (string s); でスローされる例外は、以下の 3 種類があります。
ArgumentNullException: s は null です。
FormatException: s が正しい形式ではありません。
OverflowException: s は、 MinValue 未満の数値か、 MaxValueより大きい数値を表します。
catch (ArithmeticException er1) とするとどうなるか考えてみてください。
考えても分からなければ下のコメント欄で聞いてください。
ご指摘ありがとうございます。
しかし、それでもキャッチ出来ませんでした。
ついでに現状として、
0 <= 変数.IndexOf("1"),0 <= 変数.IndexOf("2") ・・で値以外が入っていないか調べて..ということは出来ました。
しかし、catchでやってみたいので何か気が付いた点があればご指摘お願い致します。
> しかし、それでもキャッチ出来ませんでした。
「それ」って何ですか? ここに書いてないことは知り得ない第三者が読んで誤解を与えることなく分かるように書いてください。
catch (ArithmeticException) などの他の型です
などとは?
実際にどう書いて試したのか書かないと、正しいやり方に近づいたのに書き方にミスがあるのか、理解ができておらず明後日の方向を向いているのか区別ができないので。
> catch (ArithmeticException) などの他の型です
話が通じないですね。「他の型」とは具体的に何なのですか? ここに書いてないことは知り得ない第三者が読んで誤解を与えることなく分かるように書いてくださいとお願いしたはずですが・・・
ArgumentNullException, FormatException, OverflowException 以外はスローされないのだから、catch で捕捉できるのは何なのかわかりますか?
一度 https://teratail.com/help/question-tips を読んでください。ここに書いてないことは知り得ない第三者が読んで誤解なく分かるように質問を言語化するのはどうしたらよいか、よく考えて書いていただければと思います
ありがとうございました。
聞く気・やる気がないと理解。自分は撤退します。悪しからず
僕の頭で理解するには早かったみたいです。
ありがとうございました。
回答1件
あなたの回答
tips
プレビュー