2

私は現在、次の基本構造を持つプログラムを持っています

main 関数 -- ユーザーにメニュー オプションを表示 -- ユーザー入力を 2 番目の関数 (input_validator) に渡して検証 -- ユーザーがオプション 1 を選択した場合、関数 1 を実行、など

function1,2,3,etc -- 入力がユーザーから要求され、input_validator によって検証されます -- input_validator が true を返す場合、入力が適切であることがわかります

これが私の問題です。「0」と入力して、ユーザーがプログラム内の任意の時点で終了できるようにしたいと考えています。input_validator のいくつかの基本的なコード (input = 0 の場合など) でこれを行うことを計画しました。

これは単純に見えますが、quit() を使用すると、一部のリソースが解放されないなどの結果になると言われています。単純に「ブレーク」することもできません。プログラムがメインに戻るだけです。関数。

何か案は?

4

6 に答える 6

4

1つの可能性は、mainでキャッチした例外をスローすることによってそれを行うことであり、それをキャッチすると、プログラムを終了します。例外をスローすることの良い点は、デストラクタを実行して、作成されたオブジェクトをクリーンアップできることです。これは、他の場所から直接終了した場合(たとえば、を使用して)は発生しませんexit()

于 2010-02-16T06:15:07.327 に答える
4

exit()

プロセスを正常に終了し、プロセスを終了するための定期的なクリーンアップを実行します。

まず、atexit の呼び出しによって登録されたすべての関数が、登録の逆の順序で実行されます。次に、すべてのストリームが閉じられ、一時ファイルが削除され、最後に制御がホスト環境に戻されます。

于 2010-02-16T06:11:54.930 に答える
3

これは、長い間、どの種類の主流のオペレーティングシステムにも当てはまりませんでした。OSは、プログラムが明示的に解放しなかった場合でも、すべてのカーネルリソースが解放されることを保証します。コード内のどこからでもabort()またはexit()を呼び出しても問題ありません。

于 2010-02-16T06:16:02.833 に答える
1

exit(int exitCode)-stdlib.h / cstdlibで定義-おそらくexit(0); //通常の終了。

于 2010-02-16T06:13:01.320 に答える
0

main関数内のコードが実行されるまでステータスを前のメソッドに戻すことができるように、メニュー システムを設計する必要があります。同様の問題は、戻るボタンまたは前の画面ボタンにも当てはまります。

一歩下がって全体像を見ると、アンワインド手法は C++ の例外処理戦略と非常によく似ています。main menuprevious menuなど、通常の実行フローに従わない場合には例外を使用することをお勧めします。

やってみて。

于 2010-02-16T17:53:19.213 に答える