
いまどきあるかわかりませんが。。
C言語をだいぶ勉強したので本格的にプログラムを作ってみたいです(趣味プログラマーです)。
そこで、DOS画面(というかコマンドプロンプト)で、メニューを選択して色々な処理を行うプログラムを作ってみたいです。私は、関数ポインタが気に入りましたので、関数ポインタがあると尚いいです。
いまどき、こんなプログラムがあるか知りませんが、ご存知の方はおしえてください。よろしくお願いします。WINAPIとかは、なしの方針で・・
No.1ベストアンサー
- 回答日時:
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関数などで表示する
・キー入力 → コンソール入力用の関数を使用する
などとして、入力された番号に応じて対応するサブルーチンを呼び出す。
サブルーチンの呼び出しは、関数(サブルーチン)へのポインタを登録したテーブル等を利用する。
といったような感じではないでしょうか?
※あまりお役にたてなくて申し訳ありません。
どうもありがとうございます。
ご質問にお答えしますと、1)と2)のどちらでもあるというか。。どちらかというとソースだけほしいというより、作り方も多少わからないところがありますので、色々解説しながらソースも載っているのがいいです。というか、自分だけで作りますとぐちゃぐちゃになってしまうので、模範ソースが欲しいのですが、やはりソースだけというより多少なりとも解説が載っているサイトがいいんです。
Web上でフリープログラムのソースというのも一度検索してみます。私はまだやった事がないので(;^_^
でも、FarEyesさんの教えてくださった部分(図とその下の解説の部分です)を参考にしたら、意外と自分で自力で作れるような気がしました。というか、そっちの方が早いかも・・とりあえず、printfとfgetsと関数ポインタを使って簡単なプログラムを作成してみたいです。
>※あまりお役にたてなくて申し訳ありません。
いえいえとんでもございません。とても有益な情報とプログラムの解説でした。フリープログラムのサイトを調べるなり、自分でつくるなり、両方ともできるような気がしてきました。とても丁寧な図まで作っていただきなんというか、お礼のしようがありません。私はよくそういう図がHTML表現でできるなあと常々感服しています。解説もとても丁寧にしていただき、本当にありがとうございました。実現したい事がだいぶ具体的な方向に向かってきました。本当にありがとうございました。
No.4
- 回答日時:
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 …
どうもありがとうございます。
コンソール形式で宿敵をやっつけるゲームですか。。すごいですね。自分も画面があまり変わらずかつ面白いゲームを思い出していたのですが「ポートピア連続殺人事件」(ENIX)は、かなり画面遷移とか楽そうだなあと思っていました。しかし、あれはあれなりにかなり燃えた覚えがあります。
それはそうと、どうも大変有益な情報ありがとうございます。かなり、これは好奇心がそそられますね。私の質問した教えて欲しいソースとはちがいますが、これはこれでかなり勉強になりそうです。今すぐにとはいかないかもしれませんが、いずれやってみたいとおもいます。お気に入りにブックマークしておきました。
どうもありがとうございました。
No.3
- 回答日時:
強引に関数ポインターを使ってみた例です。
#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文で分岐するよりずっと綺麗に見えます。どうもありがとうございます。ソースまで書いていただき、多謝です。
No.2
- 回答日時:
#1 さんの例題を実現していき、MS-DOSアプリっぽくするならば
エスケープシーケンスを使うと、いろんな表現が楽になってきます。
画面消去とか、文字の色とか , etc...
参考URL:http://i2lab.net/xp/fwki/index.cgi?page=%A5%A8%A …
どうも、ご回答ありがとうございます。
画面消去とかできるんですね。初めて知りました。確かにそのほうがより面白そうなアプリケーションができそうです。コンソールアプリケーションは確かにデザインとかの面でちょっといただけないなあとおもっていたんですが、これならうまくできそうです。教えていただいたURLを拝見したのですが、結構有用な情報がありますね。CygwinやCoLinuxも搭載しているので、Linux上のCursesライブラリというのも使ってみたいとおもいます。
どうもありがとうございました。色々試していきたいとおもいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- C言語・C++・C# C言語で構造体の参照渡しができません 2 2022/12/18 21:22
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数とビット列
-
再起呼び出しの回数をカウント...
-
迷路を脱出する経路探索プログ...
-
組織的ディザ法のプログラムが...
-
再帰処理をループ処理に変換
-
最大の四角形を求めるプログラム
-
プログラムに詳しい方お願いします
-
OPEN
-
C言語のプログラムについて(...
-
カードシャッフルのブログラム...
-
argvのNULLチェック
-
DirectXの表示について
-
intとlongは同じ?
-
C++MFCで変数の値が上書きされ...
-
プログラミングに関して
-
複数の共有メモリの作成
-
C言語で%を使わない余りの出し方
-
C言語でテーブル引きしたら速度...
-
C言語の問題
-
信頼区間の1.96や1.65ってどこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
条件が多い場合
-
再起呼び出しの回数をカウント...
-
argvのNULLチェック
-
C言語でDOS画面のプログラム(...
-
カードシャッフルのブログラム...
-
c++ TCHARで文字化け
-
複数の共有メモリの作成
-
C++ Debug Errorについて教えて
-
C++ bmp 透過処理
-
関数とビット列
-
OpenCVによる4値化について
-
コマンドプロンプトのウィンド...
-
ヌメロンのプログラム
-
for 分についてです
-
DXライブラリとC言語 fwrite関...
-
16bitで乱数を生成する方法
-
プログラミングに関して
-
C++で表を作成したいのです ...
おすすめ情報