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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1975閲覧

vs2017の例外処理について

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/04/12 12:31

編集2018/04/12 13:02

基本の文なのですが、うまくいきません。
助けてください。
調べていると、vs2005以降は例外処理をするのに設定がいると書いてあったので
clean-mobile-phone.com
その通り設定してもうまくいきません。
教えてください

http://kagasu.hatenablog.com/entry/2017/05/04/223252
このサイトを参考にしました

#include <iostream>
using namespace std;

int main()
{
int num;
cout << "1~9までの数を入力してください。\n";
cin >> num;

try{
if(num <= 0)
throw "0以下を入力しました。";
if(num >= 10)
throw "10以上を入力しました。";
cout << num << "です。\n";
}

catch(char* err){
cout << "エラー:" << err << '\n';
return 1;
}

return 0;
}

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

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

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

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

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

episteme

2018/04/12 12:36

「うまくいきません」を説明すべし
can110

2018/04/12 12:37

「うまくいきません」とは?→https://teratail.com/help/question-tips#questionTips3
y_waiwai

2018/04/12 12:37

設定、というのはなにをどう設定したのでしょう
episteme

2018/04/12 22:32

わかってねぇなー... 「うまくいきません」を説明するとは、「期待する挙動」「やったこと」「実際の挙動」を述べることだ。
guest

回答2

0

ベストアンサー

C++において文字列リテラルはconst char[]型になります。 参考
よってchar*で受け取る事はできません。
catch(const char* err){になるかと思います。

質問する場合の基本ですが一度質問するときのヒントに目を通しましょう。

投稿2018/04/12 12:51

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2018/04/12 12:59

すみません。 以後気を付けます
退会済みユーザー

退会済みユーザー

2018/04/13 01:16

catchのreturn 1を消すとうまく行ったのですがこれでよかったのでしょうか?
asm

2018/04/13 01:25

'正常終了'でいいのですか?
guest

0

例外としてどんなものでも投げられるけど、できることなら標準例外を投げるのをオススメします。

C++

1#include <iostream> 2#include <stdexcept> 3 4using namespace std; 5 6int main() { 7 int num; 8 cout << "1~9までの数を入力してください。\n"; 9 cin >> num; 10 11 try{ 12 if ( num <= 0 ) 13 throw out_of_range("0以下を入力しました。"); 14 if ( num >= 10 ) 15 throw out_of_range("10以上を入力しました。"); 16 cout << num << "です。\n"; 17 } catch ( const logic_error& err ){ 18 cout << "エラー:" << err.what() << endl; 19 return 1; 20 } 21}

あるいはせめて:

C++

1#include <iostream> 2#include <exception> 3 4using namespace std; 5 6int main() { 7 int num; 8 cout << "1~9までの数を入力してください。\n"; 9 cin >> num; 10 11 try{ 12 if ( num <= 0 ) 13 throw exception("0以下を入力しました。"); 14 if ( num >= 10 ) 15 throw exception("10以上を入力しました。"); 16 cout << num << "です。\n"; 17 } catch ( const exception& err ){ 18 cout << "エラー:" << err.what() << endl; 19 return 1; 20 } 21}

投稿2018/04/12 23:19

episteme

総合スコア16614

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

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

退会済みユーザー

退会済みユーザー

2018/04/13 01:13

return 1を消すとうまく行ったのですが、これでよかったでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/13 01:14

catch のreturn1です
episteme

2018/04/13 01:15

return 1 があるとなにがどう「うまくいかない」ですか?
退会済みユーザー

退会済みユーザー

2018/04/13 01:18

例えば-1をいれると終了していたのですが、ちゃんとcatchの内容を表示されるようになりました
episteme

2018/04/13 01:28

...コマンドラインから実行すれば、入力:-1に対してcatch節にある出力が行われます。 1. どうやって実行していますか?  2. IDEから"デバッグなしで開始"(Ctrl+F5)するとどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問