プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【C++】例外処理たるものを理解しようとしてみた

構成


No.1 実際作ったやつ
No.2 例外処理







  No.1 実際作ったやつ


引越し関係がやっとこさ落ち着いたのでなんか作りたいなーって思っていた矢先に、大学の部活で後輩に対して課題が出ていたので便乗してゲーム作ってました。
でも、そんなにすぐアイディア湧くわけじゃないので変なのが出来上がった。

 その中で、数値入力をさせるものがありました。ですが、やろうと思えば文字入力も出来ちゃう。
ということで例外処理やってみました。Javaでやったことあったけどそんなに理解できていなかったからある意味初見。


 で、ちなみに一応作ったやつがこれ
https://github.com/yutateno/RehabilitationConsoleGame





  No.2 例外処理


 まず先にどんなコードが出来上がったかといえば


inline void  InputFail(int& t_input)
{
	std::string temp = "";

	while (true)
	{
		try
		{
			std::cin >> temp;
			t_input = std::stoi(temp);
		}
		catch (...)
		{
			SleepCout("不正な 数値が 入力 されました。再度 お願いします。");
			continue;
		}

		break;
	}

	return;
}
    


 というものが出来上がった。

 ぶっちゃけ例外処理を作るのは苦じゃなかったんだけど、例外処理として判定されるものと例外処理として判定されないものの違いがよくわかんなくて苦戦してしまった。


 例えば、以下のコードなら例外処理なんて行かずに普通に処理される。


inline void  InputFail(int& t_input)
{
	std::string temp = "";

	while (true)
	{
		try
		{
			std::cin >> temp;
			t_input = temp;
		}
		catch (...)
		{
			SleepCout("不正な 数値が 入力 されました。再度 お願いします。");
			continue;
		}

		break;
	}

	return;
}
    


 違いは単純でt_inputへの入れ方がstoiという関数を使ったか、無理やり入れるようにしたか。

例外処理は例外が投げられる、throwとか関数の内部に例外を送るものがあるとかそういうもの。でも、後者の方のコードでは例外を投げる処理が一切ないし、コードだけ見れば普通に動いてしまう。
あと、冷静になってstoiのリファレンスを見ればちゃんと"例外"っていう項目があるっていうね。わっかりやす。これ見れば一発解決やん。
https://cpprefjp.github.io/reference/string/stoi.html