Menu
Coddy logo textTech

'try' と 'catch' ブロック

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 49/56。

try ブロックと catch ブロックは連携して、コードのセーフティネットを作成します。リスクのある可能性のあるコードを try ブロックの中に配置し、例外が発生した場合、プログラムは対応する catch ブロックにジャンプして、エラーを適切に処理します。

基本的な構文構造は次のようになります:

try {
    // 例外をスローする可能性のあるコード
} catch (exception_type e) {
    // 例外を処理するコード
}

実用的な例として、std::stoi を使用して文字列を数値に変換する場合が挙げられます。文字列に数値以外の文字が含まれている場合、この関数は std::invalid_argument 例外をスローすることがあります。

try {
    std::string input = "abc";
    int number = std::stoi(input);  // これは例外をスローします
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

tryブロック内で例外が発生すると、プログラムはそのブロック内の残りのコードの実行を直ちに停止し、catchブロックにジャンプします。これにより、プログラムのクラッシュを防ぎ、何らかの問題が発生した際に、ユーザーに対して有益なフィードバックを提供できるようになります。

challenge icon

チャレンジ

簡単

try ブロックと catch ブロックを使用して、安全な文字列から数値への変換を行うプログラムを作成してください。このチャレンジでは、ユーザー入力の文字列を整数に変換する際に発生する例外を処理する方法についての理解をテストします。

以下の入力が提供されます:

  • 有効な整数を表している場合とそうでない場合がある文字列 userInput

プログラムは以下の手順を実行する必要があります:

  1. std::stoi を使用した文字列から整数への変換を try ブロックの中に配置します
  2. 変換に成功した場合は、変換された数値と成功メッセージを出力します
  3. 文字列に数値以外の文字が含まれている場合に発生する std::invalid_argument 例外を処理するために catch ブロックを使用します
  4. catch ブロック内で、入力が無効であることを示すエラーメッセージを出力します

以下の正確な出力形式を使用してください:

変換に成功した場合:

Valid number: [converted_number]

例外をスローする無効な入力の場合:

Error: Invalid input

std::stoi は、整数に変換できない文字列に遭遇したときに std::invalid_argument 例外をスローすることに注意してください。try ブロックには変換の試行を含め、catch ブロックにはこの特定の型のエラーを処理するために例外タイプとして std::invalid_argument& を指定する必要があります。例外が発生すると、プログラムは直ちに try ブロックから対応する catch ブロックにジャンプし、プログラムのクラッシュを防ぎます。

チートシート

trycatch ブロックを使用して、例外を安全に処理します:

try {
    // 例外をスローする可能性のあるコード
} catch (exception_type e) {
    // 例外を処理するコード
}

std::stoi による文字列から整数への変換の例:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // これは例外をスローします
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

try ブロック内で例外が発生すると、プログラムは直ちに対応する catch ブロックにジャンプし、クラッシュを防ぎ、適切なエラー処理を可能にします。

自分で試してみよう

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 入力を読み込む
    string userInput;
    cin >> userInput;
    
    // TODO: 以下にコードを記述してください
    // 文字列を変換するために std::stoi と try-catch ブロックを使用してください
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン