- ベストアンサー
C言語でDOS画面のプログラム(できるなら、メニュー方式で関数ポインタとか使ったものがいいです)
いまどきあるかわかりませんが。。 C言語をだいぶ勉強したので本格的にプログラムを作ってみたいです(趣味プログラマーです)。 そこで、DOS画面(というかコマンドプロンプト)で、メニューを選択して色々な処理を行うプログラムを作ってみたいです。私は、関数ポインタが気に入りましたので、関数ポインタがあると尚いいです。 いまどき、こんなプログラムがあるか知りませんが、ご存知の方はおしえてください。よろしくお願いします。WINAPIとかは、なしの方針で・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
kamkamkam3さん、こんにちは。 いまいち目的が判らないのですが、 1)コンソールアプリケーションを作りたいので、作り方を教えて欲しい。 2)実際にC言語で作られたコンソールアプリケーションのソースが欲しい。 のどちらでしょう?それとも両方でしょうか? ■上記1)なら ・作りたいプログラムが、どんな画面なのか、どんな機能が欲しいのかなどをもう少し具体的に提示する。 ・どの部分が判らないのかを提示する。 ・途中まで作っているのなら、その部分のソースを提示する。 などの処置を行ってみてください。良いアドバイスがもらい易いと思います。 今のままだと漠然としすぎていて、回答する方も答えづらいかと思います。 ■上記2)なら ・WEB上でソース付きのフリープログラムを公開しているサイトを探す。(海外サイトの方が豊富かも?) ・C言語の書籍(CD-ROMなどでサンプルソース付きのもの)を入手する。 などの対処を採ってみてください。 ■参考までに ┏━━━━━━━━━━━━━━━━━━━━━━┓ ┃ XXXXXXXXX ← プログラムタイトル ┃ ┃ ┃ ┃ 1.XXXXXXXXX ← 処理1 ┃ ┃ 2.XXXXXXXXX ← 処理2 ┃ ┃ 3.XXXXXXXXX ← 処理3 ┃ ┃ 4.XXXXXXXXX ← 処理4 ┃ ┃ 5.終了 ┃ ┃ ┃ ┃実行する処理の番号を入力して下さい。>_ ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━┛ 上記のようなイメージのプログラムなら、 ・タイトル、メニュー表示 → 単純にprintf関数などで表示する ・キー入力 → コンソール入力用の関数を使用する などとして、入力された番号に応じて対応するサブルーチンを呼び出す。 サブルーチンの呼び出しは、関数(サブルーチン)へのポインタを登録したテーブル等を利用する。 といったような感じではないでしょうか? ※あまりお役にたてなくて申し訳ありません。
その他の回答 (3)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
30年ほど昔、コンピュータが欲しければ自分でチップセットを買ってきて 自作しなければならなかった頃にマニアあこがれのゲームが有りました。 それが「StarTrekゲーム」です。 宇宙船エンタープライズを駆って宿敵クリンゴンを殲滅するゲームです。 当時のコンピュータはコンソール形式が普通だったので移植しやすいと思います。 StarTrekゲームの詳しい説明(英語)(Basicおよびcのプログラムソース有り) http://www.dunnington.u-net.com/public/startrek/ Star Trekゲーム (Prolog版) http://www.axe-inc.co.jp/~take/trek/trekpro-manj.html
お礼
どうもありがとうございます。 コンソール形式で宿敵をやっつけるゲームですか。。すごいですね。自分も画面があまり変わらずかつ面白いゲームを思い出していたのですが「ポートピア連続殺人事件」(ENIX)は、かなり画面遷移とか楽そうだなあと思っていました。しかし、あれはあれなりにかなり燃えた覚えがあります。 それはそうと、どうも大変有益な情報ありがとうございます。かなり、これは好奇心がそそられますね。私の質問した教えて欲しいソースとはちがいますが、これはこれでかなり勉強になりそうです。今すぐにとはいかないかもしれませんが、いずれやってみたいとおもいます。お気に入りにブックマークしておきました。 どうもありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6289)
強引に関数ポインターを使ってみた例です。 #include <stdio.h> #include <stdlib.h> typedef double (*FUNC)(int, int); double tasu(int a, int b) { return a + b; } double hiku(int a, int b) { return a - b; } double kakeru(int a, int b) { return a * b; } double waru(int a, int b) { if (b != 0) { return (double) a / b; } else { fprintf(stderr, "0では割れません。\n"); exit(1); } } int main(void) { FUNC func_tbl[] = { tasu, hiku, kakeru, waru }; char *op_tbl[] = { "+", "-", "*", "/" }; int a, b, op; printf("2個の数値を入力してください > "); scanf("%d%d", &a, &b); do { printf("0:足し算 1:引き算 2:掛け算 3:割り算 > "); scanf("%d", &op); } while (op < 0 || 3 < op); printf("%d %s %d = %f\n", a, op_tbl[op], b, func_tbl[op](a, b)); return 0; }
お礼
どうも、わざわざ、ソースまで書いていただきありがたいです。自分はまだコンソールアプリケーションをほとんど組んだ事がないので、このような模範的なソースを見せていただけるだけで、大変勉強になります。正直、どう組んだらいいのかわからないという部分がありますので・・ やっぱり関数ポインタは非常にスマートに見えて気持ちいいですね。switch文で分岐するよりずっと綺麗に見えます。どうもありがとうございます。ソースまで書いていただき、多謝です。
- kent85
- ベストアンサー率52% (38/73)
#1 さんの例題を実現していき、MS-DOSアプリっぽくするならば エスケープシーケンスを使うと、いろんな表現が楽になってきます。 画面消去とか、文字の色とか , etc...
- 参考URL:
- http://i2lab.net/xp/fwki/index.cgi?page=%A5%A8%A5%B9%A5%B1%A1%BC%A5%D7%A5%B7%A1%BC%A5%B1%A5%F3%A5%B9
お礼
どうも、ご回答ありがとうございます。 画面消去とかできるんですね。初めて知りました。確かにそのほうがより面白そうなアプリケーションができそうです。コンソールアプリケーションは確かにデザインとかの面でちょっといただけないなあとおもっていたんですが、これならうまくできそうです。教えていただいたURLを拝見したのですが、結構有用な情報がありますね。CygwinやCoLinuxも搭載しているので、Linux上のCursesライブラリというのも使ってみたいとおもいます。 どうもありがとうございました。色々試していきたいとおもいます。
お礼
どうもありがとうございます。 ご質問にお答えしますと、1)と2)のどちらでもあるというか。。どちらかというとソースだけほしいというより、作り方も多少わからないところがありますので、色々解説しながらソースも載っているのがいいです。というか、自分だけで作りますとぐちゃぐちゃになってしまうので、模範ソースが欲しいのですが、やはりソースだけというより多少なりとも解説が載っているサイトがいいんです。 Web上でフリープログラムのソースというのも一度検索してみます。私はまだやった事がないので(;^_^ でも、FarEyesさんの教えてくださった部分(図とその下の解説の部分です)を参考にしたら、意外と自分で自力で作れるような気がしました。というか、そっちの方が早いかも・・とりあえず、printfとfgetsと関数ポインタを使って簡単なプログラムを作成してみたいです。 >※あまりお役にたてなくて申し訳ありません。 いえいえとんでもございません。とても有益な情報とプログラムの解説でした。フリープログラムのサイトを調べるなり、自分でつくるなり、両方ともできるような気がしてきました。とても丁寧な図まで作っていただきなんというか、お礼のしようがありません。私はよくそういう図がHTML表現でできるなあと常々感服しています。解説もとても丁寧にしていただき、本当にありがとうございました。実現したい事がだいぶ具体的な方向に向かってきました。本当にありがとうございました。