• ベストアンサー

Cのコンソールアプリ

Cを勉強し始めて1ヶ月ほどになります。 [a] メインメニュー (1)○○開始 (2)○○終了 (3)××× (4)△△△ (9)プログラムの終了 処理番号入力:_ [b] ○○開始 ESCでメインメニューへ戻る (1)○○開始 (2)キャンセル 処理番号入力:_ コンソールアプリで[a]のようなメインメニューがあり [b]のような画面でキャンセルの選択やESCを押した場合などに 「メインメニューに戻る」動作をさせたいのですが、 forやwhileを使えばいいのでしょうか? なかなかイメージが出来ていなくて教えていただけるとありがたいです。 環境はVisual C++ 6.0です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

「状態遷移」という概念を理解すると、多少楽になります。 全体の構成は、 while(1) { キーを読み込む 状態を遷移させる 今の状態における処理をする } という流れになります。 「キーを読み込む」は、getchar() などが使えそうです。 「状態を遷移させる」 というのは、「今の状態(メインメニューだとか、次のメニューだおとか)」と「入力されたキー」から、「次の状態」を決定します。 switch(今の状態) { case メインメニュー : if (入力 == xxx) 次の状態に変化 .... } こんな感じ。 最後に、「今の状態の処理」は、変更された「状態」にあわせて処理をします。 この方法だと、ソースの量は増えますが、一度にデバッグする範囲を狭くすることができます。

その他の回答 (1)

回答No.1

ループ(for、while)を使う 入力関数(get、getchar等)を使う 1.まずメニューが多いとデバッグが難しいので単機能でやってみましょう(終了処理のみとか) 2.初めのうちはフローチャートを書いてみることをお勧めします。

関連するQ&A

  • コンソールアプリの入出力制御

    早速ですが、質問させていただきます。 現在、CUIのコンソールアプリケーションをキーボードの入力より、メニューの制御などを行っています。 コンソールアプリケーションは以下のようなメニュー・設定 などが表示され、それぞれ、キーボードより選択を行う形となっております。 ==== Menu ===== 1.test1 2.test2 3.test3 > テスト番号を入力してください: 上記のような入力がいたるところに存在し、大変手間となっております。 そこで、外部のソフトから、本コンソールアプリの入出力制御が出来ればと考えております。 この場合、バッチファイルなどでコンソールアプリへの制御が可能なのでしょうか?

  • Visual C++ コンソールアプリ

    YYMMDDHHMMSS.txtという形式の日時ファイル名のtxtが 実行ファイル直下のtxtフォルダに複数個あり、 getsとsscanfでYYYYMMDD形式で入力を待ち、 日付が該当したらfopenで開きたいのですが どのように指定すればいいのでしょうか? 060125234805.txt 060126101240.txt 060126181124.txt と複数のファイルがあり、20060126と入力した場合に 該当する日付の2つのファイルの中身を画面に表示させたいのです。 時間の早いものから表示して、矢印キーで画面を切り替えようと考えています。 Visual C++ 6.0 コンソールアプリです。

  • Visual C++ 2010 Express: [デバッグなしで開始

    Visual C++ 2010 Express: [デバッグなしで開始] 実行時もコンソールが閉じる Visual C++ 2008 Expressでは、 [デバッグなしで開始](Ctrl + F5)を実行すると、 出現したコンソールが、キー入力を待つ状態になっていたのですが、 Visual C++ 2010 Expressでは、同じ操作では 実行後にコンソールが閉じてしまいます。 Visual C++ 2010 Expressでも、[デバッグなしで開始]を 実行した後に、コンソールを閉じなくする方法があるのでしょうか? C言語の勉強中です。 最近コンピュータを新しくしたので、 ついでにVisual C++ 2010 Expressをダウンロードしたのですが、 プログラムの実行が確認できなくて困っています。 よろしくお願いします。

  • visual c++環境でのコンソールアプリ実行について。

    visual c++の開発環境を使ってC言語の勉強をしようと思っています。 下記のような手順でデバッグを実行しようと思っているのですが、上手くいかずこまっています。 1 Sample.cを、あらかじめ、/Visual C++ 2005/Projects/Sample/Sample.cのように格納しておく。 2 統合開発環境で、「ファイル」→「新規作成」→「既存のコードからプロジェクトを作成」を選択する。 3 既存のコードからプロジェクトを作成ウインドウが開き、「作成するプロジェクトの種類を入力してください」が「Visual C++」になっているので、そのまま「次へ」をクリックする。 4 プロジェクトの場所とソースファイルの指定ウインドウで、「参照」ボタンを利用して、「プロジェクトファイルの場所」欄に、「・・・/Projects/Sample」と入れ、「プロジェクト名」欄に「Sample」と入力する。「次のフォルダからプロジェクトにファイルを追加します」のチェックをそのままにして、「次へ」をクリックする。 5 プロジェクト設定の指定ウインドウで、「プロジェクトのビルド方法」の「Visual C++を使用する」のチェックをそのままにし、「プロジェクトの種類」を「コンソールアプリケーション」にする。それ以降にはチェックを付けないで、「完了」をクリックする。 6 統合開発環境の「ソリューションエクスプローラ」部から「Sample.c」を選んでダブル・クリックすると、コードが表示される。 7 これでデバッグするとコンソール(Visual c++のDOS窓)が一瞬表示され消えてしまいます。 間違っている所やこのようにしたらなど、意見よろしくお願い時ます。

  • コンソールで整数を入力(C#)

    C#でコンソールから整数を入力したいのですが、 やり方がみつかりません。分かる方教えてください。 C++だと下のようなコードです。 int a; cout<<"整数を入力して!"; cin>>a; cout<<"入力した整数は:"<<a; こんなこと分からなくてすみません...

  • Visual C++ 2010 Expressについて

    Visual C++ 2010 Expressについて Visual C++ 2010 Expressでデバックなしで開始を押したらコンソールの画面がすぐに閉じてしまい、プログラムを確認することができません どうすればコンソールの画面をすぐ閉じないようにすることができるのでしょうか? よろしくお願いします

  • VC++でコンソールアプリのパスの対応の問題

    今、VC++でコンソールアプリをやっていますが、アプリのイメージとして sample.exe -f C:\a.txt -d のコマンドで、C:\a.txtのファイルを削除し、 sample.exe -f C:\a.txt -s で、ファイルをコンソールに表示するようにしたいですが、問題は指定されたパスの問題ですが、内部でファイルのfopenとか、removeとは、C:\\a.txtしないといけないようですが、 コマンドから入力したパスに対する処理は、どうすればよろしいでしょうか?よろしくお願いします。

  • VC++にて、コンソールを二画面表示

    Visual C++ 6.0でコンソールを二画面表示し、片方(コンソール1とします)に入力専用画面、もう片方(コンソール2)に情報を垂れ流しにするアプリを作りたいと思います。どのようにしたら良いのでしょうか。ご教授いただけると幸いです。

  • エクセル関数で、ご教示下さい

    例として、セルA1~A10に、1.2.3.・・・・10と番号を入れて       セルB1~B10には、商品の在庫数が入力されているとします。 この時、セルC1に集計の開始番号 セルC2に集計の終了番号を入力すれば、      D1に開始番号から終了番号までのB列の合計を表示させたいのですが、      このような集計ができるD1に入れる関数はあるでしょうか。 例えば、B列の3行目から6行目までの合計をD1に表示させたい場合に      C1にA列番号の3を入力、C2には6を入力すれば、D1にB3からB6の合計を      表示してくれる、といった関数です。      開始番号、終了番号は、何番~何番までと、その都度変わります。 どなたか、よろしく、お願いいたします。         

  • Cシェルで、全テーブル名をコンソールに、選んだ名称をCSVに出力

    初めまして。質問があります。Cシェルはほぼ初心者なので、どなたかよろしければ教えて下さい。データベースの全マスタ名(全テーブルではなくマスタのみ。)と連番をコンソール上に出力し、入力させます。その連番の中からどれか希望のものを選択させ(番号を入力させる)、選ばれたものだけをCSVファイルに出力させる、というCシェルを早急に作らなければいけなくなりました。全マスタを抽出という処理からすでに苦闘しているところです。どなたかお願い申し上げます。

専門家に質問してみよう