教えて!gooにおける不適切な投稿への対応について

C言語初~中級者です。文法の基礎は一通りマスターしています。

C++とかC#などの、GUIベースの言語も並行して勉強していますが、進捗はまだCに遥かに及ばず、Cだと結構いろんな好きな小さなプログラムを作れたりしています。実行環境は、Visual Studioのコマンドプロンプト画面です。OSはWindows10です。

ですが、私の作れるものは、画面に文字が表示されて、処理が進んでいくとどんどん縦にスクロールしていくタイプのものだけです。

そこで質問です。私はMS-DOSの時代からパソコンを使っていますが、昔の(Windows95が出る前の)一太郎とかLotus1-2-3みたいに、DOSベースでも、上のような文字だけが画面を縦に流れていくタイプでない本格的なプログラムを作ってみたい、と考えています。
(最初にメニュー画面が表示されて、処理ごとに画面表示が切り替わったりするような…。うまく言えなくて済みません。マウス対応などもやってみたいです。)
いろいろ自分でも調べてみましたが、C言語の仕様にないライブラリなどを使えば、画面に線を引いたり図を描いたりできるようですが、今ウェブ上に残っている物ではほとんどURLが死んでいたりしてアクセスできません。
(ヤフーとかニフティとかのサービス上で公開されていたものばかりです。)

C#などの勉強も並行して進めてはいくつもりですが、Cの勉強も続けていきたいです。つきましては、Cのコンソールモード(?、DOSベース?、うまく言えませんが)で動作する本格的な(描画も含めて)プログラムを作るには、どんな勉強・ツールが必要でしょうか。アセンブラなどが必要なのでしょうか。書籍もいろいろ探してきましたが、基礎の本ばかりで、実用的な上級者向けの本がなかなか見当たりません。適切な書籍があれば、合わせてご教授頂きたいです。

なかなか言葉でうまく伝えられなくてもどかしい限りですがは、真剣に考えていますので、お詳しい方、ご教授をお願い致します。

gooドクター

A 回答 (12件中1~10件)

> ここでいう「GUIライブラリ」とは、具体的に何を指すのでしょうか。



Windowsでは基本DirectXになるんじゃないでしょうか。

ええと、ここでも一応説明しておきますが。

過去(具体的には1980年代です)、PCはたくさん種類がありましたね。
貴方が提示したNEC PC-8801。他にもSHARP X1とかX68000とか。富士通FM-TOWNSとか。
米国製PCでもApple Macintoshを始めとしてATARI 520ST、Commodore Amigaとか。
たくさん会社があってたくさんの製品がリリースされていた、と言う事は。
当然OSレベルでも互換性がない。
そして当然ハードウェアも互換性がなかった、と言う事です。各マシンの画像回路が「全く同じ」と言う事があり得ない。
そうすると、ぶっちゃけ、プログラミング言語以外は各機械に於いて同じようにプログラム出来る保証がないんですよ。

ここで次の原則が出てきます。

・プログラミング言語自体は標準化出来ても、画像出力に関しては標準化するのは難しい

これは今でも基本変わってないんです。

実はPCのハードウェアに関して言うとここ20年くらいは収束していますがね。

・CPUはインテルチップが圧勝
・描画チップはNVIDIAが圧勝

スマホはとりあえず除きますがそんなカンジで収束してきた(弱肉強食の結果、です)。
ところがOS自体がまだ統一されていない。
まぁ、表面的にはWIndowsの圧勝ですが、ネット系の企業のおかげでUNIXがそっちの世界では圧勝してるんですよね。(今の)Mac、そしてLinuxがUNIX系として「そちらの世界」では勝ち残っています。
で、OSが違うと描画関係の関数の「設計の仕方」ってのが当然、OSによって変わってくるんですよね。
次の2つは必ずしも等価、ってワケじゃないんですが、それぞれのOSが提供するAPIとしての役割を果たしています。

・Windows: DirectX
・UNIX/Linux: X Window System

実際は後者は言わば「パーツ」で、UNIX/Linux側はどっちかと言うとパーツを組み合わせて「(いわゆる)OS」を作る、って発想なんですが、いずれにせよ、この二者がそれぞれのOSでの(殆ど)最低辺の描画関係のAPIとして提供されています。
ここで最低辺、って何なのか、って事なんですが。

1. 低レベルで直接ハードウェアを叩くような実装。
2. 自由度が高い。言い換えると何をやるにしても煩雑な手続きが必要。
3. 関数として見た場合、やたら多くの引数が必要。

なんて事を良く見かけます。
結果、ハードウェアに近いレベルのAPIが提供されていても、プログラミング自体は割に面倒くさくなりがちなんです。
で、次の2つの要求が出てきたんですね。

1. 各OS上で共通化可能な描画ライブラリを作成出来ないか(クロスプラットフォーム)。
2. 描画関係のAPIを直接弄るのがメンド臭いんで、間接的に扱える仕組みが作れないか。

この2つはそれぞれ独立した欲求だったんですが、取り敢えずこの延長線上にいわゆるGUIライブラリ、と言うモノがあります。

まず断っておきますが、単純にWindowsだけで動かすのが目的なら、Visual Studio上でのRAD(Rapid Application Development)でGUI作る分で十分だと思います。多分部品ペタペタ貼るだけで作れるんで、殆ど「プログラミング」は必要ないでしょうし、仮にWindow自体がC++で作られてても、その「ガワ」自体はCから呼び出せるんじゃないかな。
今のソフトは実はGUIの「ガワ」と本体はある意味別になってるんで、ガワだけ別のプログラミング言語で作る、ってのは良くあるし、実際問題GUIデザイナーでマウスで作っていくんでその部分の「プログラミング」ってほぼしなくて済むんですよ。

でまぁ、要求通り、GUIライブラリ、と言うのをいくつか紹介しておきます。紹介しておくだけ、です。

wxWidgets(クロスプラットフォーム):
https://www.wxwidgets.org/

Qt(クロスプラットフォーム):
https://www.qt.io/ja-jp/

Gtk(Linux/Unix):
https://www.gtk.org/

最初のwxWidgets、そして次のQtは凄く有名で、Pythonを始めとしたバインディングも提供されてる事もあり、非常に有名ですね。
ただし。
残念ながらC++以降が中心で、Cに対する単純なバインディングは提供されていないのです。
また、Gtkは逆にCで書かれてる事で有名なんですが、Unix系でしか使えません。だから紹介だけしておきますが、この辺は使いモンにならんですねぇ。
意外と穴なのが#5で紹介されてるTcl/tkです。これはある意味メチャクチャ古いGUIライブラリなんですが、枯れてる分安定してるし、簡易的で使いやすいです。

Tcl/tk:
https://www.tcl.tk/

Tcl/Tk GUI Programming:
http://www.nct9.ne.jp/m_hiroi/tcl_tk.html

C言語からの拡張も簡単な開発効率の高さがポイント - Tcl/Tk編 :
https://news.mynavi.jp/article/helloworld-13/

ですからWindowsでC言語によるGUIプログラミングをするなら、

1. DirectX等を使ってVisual Studioでプログラミングする
2. Tcl/Tkを使ってGUIのガワだけプログラミングする

の2つが取り敢えず使える手段かな・・・・・・?
あと、Tcl/TkでもGUI Builderが一応あって、Tclで直接プログラミングしないでもマウスで部品をペタペタ貼ってガワを作っていく・・・と言う事も出来るようです。

SpecTcl and GUI Builder Home Page:
http://spectcl.sourceforge.net/

> 実は、私の希望の一つが、昔のN88BASICのプログラムをCに移植したい、というものなのです。N88BASICのプログラムのソースが大量に残っていますので。内容は、物理のシミュレーションをするもので、DOSの真っ黒な画面上でですが、結構本格的に点と線を使ってグラフィカルに動作していました。

ああそうですか。
でも単純にN88BASICのプログラムをWindowsに移植したい、って場合、N88BASIC => JIS FullBasicの方が移植難易度が低い可能性もありますよ。
興味があるなら、ちょっとCを忘れて、十進BASICを導入してみても面白いかもしれません。

十進BASIC:
https://hp.vector.co.jp/authors/VA008683/

十進BASICのWebページには色々とJIS FullBasicに関しての文書も豊富にあるんで、かつてのN88BASICの経験があるのなら、割とすぐ分かるんじゃないでしょうか。

写真: プログラミング言語Pythonの備え付けIDEであるIDLE。
実はTcl/tkで作られていて、PythonはデフォルトでのGUIライブラリとしてTcl/tkを扱っている。
「Cで本格的なプログラムを作りたい」の回答画像8
    • good
    • 0
この回答へのお礼

再三のご回答、誠にありがとうございます。

ハードウェア、OS、チップの歴史のお話まで、俯瞰的で非常に分かりやすいです。ありがとうございます。

> まず断っておきますが、単純にWindowsだけで動かすのが目的なら、Visual Studio上でのRAD(Rapid Application Development)でGUI作る分で十分だと思います。多分部品ペタペタ貼るだけで作れるんで、殆ど「プログラミング」は必要ないでしょうし、仮にWindow自体がC++で作られてても、その「ガワ」自体はCから呼び出せるんじゃないかな。

ここでおっしゃるVisual Studio上でのRADとは、Win32 APIと同じ意味ととらえてよいのでしょうか。

> でも単純にN88BASICのプログラムをWindowsに移植したい、って場合、N88BASIC => JIS FullBasicの方が移植難易度が低い可能性もありますよ。興味があるなら、ちょっとCを忘れて、十進BASICを導入してみても面白いかもしれません。

十進BASIC、余裕があれば試してみたいと思います。ありがとうございます。

Pythonのお話もありがとうございます。Pythonもできれば強力な武器となると思っていますが、私現在、多言語の勉強を並行して行っております。核としているのはC・C++・C#で、進捗はCが勉強を始めてからかれこれ20年以上経つので進捗がダントツによく、C#も5年くらいの計画でいっちょまえにプログラミングできることを目指して励んでおります。その中で、Cもまだ息長く生き残っていくと思われますので、Cでいろいろ好きなようにプログラミングできることを強く希望している次第でございます。

いろいろありがとうございました。上の「Visual Studio上でのRAD」についてだけ、ご回答を頂きたく、お願い致します。何度も本当に恐縮ですがよろしくお願い致します。

お礼日時:2021/04/20 16:20

あれ、Turbo Pascal は持ってましたが


あれは GUIは作れないしRADでもないです。
最初にIDEを提供した製品かな。僅か50ドルだったのも話題をさらいました。

BοrlandのRADはDelphi(1995年)が最初です。
最初のRADは多分 MSのVB(1991年)
    • good
    • 0
この回答へのお礼

No.5、7さんですね、ありがとうございます。参考にさせて頂きます。

お礼日時:2021/04/23 15:04

> Visual Studio上でのRAD



RAD ≒ GUI Builderって考えて良いです。
通常、Visual StudioなんかのオールインワンなIDEに含まれてるGUI Builderを含めて、システム的にはRADって呼ぶかなぁ。
逆にオールインワンじゃないIDEで別口でGUI Builderを用意しなければならない場合RADとは呼ばない、とか。
そんなカンジでの緩い言い回しになってると思います。

元々、RADって言い回しって確か、BolandってメーカーのTurbo Pascalって商品から出てきた言い回しだったんじゃないかしらん。多分DOS使ってたのなら聞いた事あるメーカーだと思うんですが。
Turbo Pascalって登場時に「テキストエディタ含む」の言語処理系として有名だったと思うんですが、プログラミングがCLIからGUIに移行する際に、初めてマウスで部品ペタペタ貼ってGUIなソフトをプログラミング出来る環境を提供したんですよ。
それまでだと「Windowをプログラムして部品をプログラムして」って全部テキストでプログラミングせなアカンかったのをマウスで視覚的に部品を置くだけ、でデザイン出来るようにしてしまった。当然作業効率が良いわけですよね。
それでBolandが「素早くプログラムを開発出来る」環境、ってぇんで「Rapid Application Development」って名付けたんですよ。それから、「GUIデザイナまでオールインワンなプログラミング開発環境」を特にRADとか指し示すようになったのです。

写真: RADの例。
例示はBorland TurboPascal/Delphiのクローン、FreePascalのLazarusで。
Object Pascalを書くソースエディタがあるが、同時にForm1と言う「GUI部品を配置するウィンドウの雛形」が出ている。
「Visual Basicの見た目に近い」と思うかもしれないけど、元々こういうプログラミングのシステムをWindowsに持ってきたのはBolandが最初だったと思う。
「Cで本格的なプログラムを作りたい」の回答画像11
    • good
    • 0
この回答へのお礼

再三のお願いにお答えくださり、誠に感謝致します。

BolandのTurboPascal、知人が同じ社のTurbo Cを使っていて、マニュアルを借りて読んだことがあります。なつかしいです。

いろいろとありがとうございました。

お礼日時:2021/04/20 23:05

No.4 and No.9 です。



●windows.hがインクルードされていますね。この記述でエスケープシーケンスが使えるという事でしょうか...

サンプルプログラムを上から辿ると、注釈に...

// Try some Set Graphics Rendi...

行が見えます。この直前に...

SetConsoleMode()

関数が見えますが、これがモードを切り替える中核の関数です。
この関数実行以降エスケープシーケンスが利用できるはずです。それ以前にも幾つかの関数が使用されていますが、何れもSetConsoleMode()関数への引数を取得するために使われています。。

// Try some Set Graphics Rendi...注釈以降はそのままスエスケープシーケンスを実行していていますので、つまりこのサンプルをそっくりご質問者様のプロジェクトにコピペしてしまえば、ご質問者様が中身を変更して様々試してみることができると思います。
    • good
    • 0
この回答へのお礼

再三のご回答誠にありがとうございます。

具体的なご教示をありがとうございます。よく分かりました。

ちょっとやってみたいと思います。いろいろと本当にありがとうございました。

お礼日時:2021/04/20 19:10

No.4 です。



1.CONFIG.SYSを書き換えて再起動する、という事...
CONFIG.SYSは既に使えないようですね。なんだかたくさんあったのですが、結局これでしょうか...

https://docs.microsoft.com/en-us/windows/console …

下の方にスクロールするとサンプルプログラムが出てきます。

2.VisualStudioでC標準関数を使用する限り、移植性は低下...この部分がよく分かりません...

C言語の標準関数と言うと、stdio.hやstdlib.hなどに属する関数 が思い当たりますが、例えばstdioに含まれるfopen()関数です。コンパイルすると「fopen_s()を使え。」と怒られます。VisualStudioを使うとこのような関数がたくさん出てきますが、使えるのはvsだけですから、他のOSやコンパイラで同じソースを使用しようとすると全てを書き換える必要があります。
    • good
    • 0
この回答へのお礼

再びのご回答ありがとうございます。

リンク先を見ましたが(日本語に翻訳して…)、よく分かりませんでした。1つ目のソースでwindows.hがインクルードされていますね。この記述でエスケープシーケンスが使えるという事でしょうか、見当違いなことを聞いていたら済みません。

結局、Windows10のコマンドプロンプトでは、config.sysみたいなファイルをいじらないとエスケープシーケンスは使えないのでしょうか。単純に画面クリアしたり、色をつけたりするのも、Cの仕様ではできないのでしょうか。
(私は、画面クリアをするというと、DOSコマンドのCLSとCのsystem()関数を使ってsystem("CLS");と書くのを思いつきますが…)

「Cの標準関数」に関するご回答、ありがとうございました。よく分かりました。

Windows10のコマンドプロンプトでエスケープシーケンスを使える方法はないのでしょうか…。ご紹介頂いたリンク先をもう少しよく読んでみます。ありがとうございました。

お礼日時:2021/04/20 16:42

>これは、CではなくてC++ですか?



cです。
    • good
    • 0
この回答へのお礼

再びのご回答誠にありがとうございます。

> >これは、CではなくてC++ですか?
>
> cです。

あれ、「ペゾルト本」についてちょっと調べてみてC++だと思ったのですが、Cでしたか、失礼しました。

いずれにしても興味がありますので、書籍の購入を検討したいと思います。

No.5の、

> 今時 Windows の GUI は .NET + C# とかが主流なので、実務的価値はないですが、Windows の動作の基本部分を詳細に触れることができるので、とてもとても勉強になります。仕入れた知識は他のGUIシステムでも役立ちます。

の部分に大変惹かれました。実用に供するプログラミング技能を身に着けることが第一目的ですが、本格的にやりたいので、奥深い知識も身に着けておきたいとおもっております。

ありがとうございました。

お礼日時:2021/04/19 19:05

> Cursesですか。



はい、そうですねぇ。

まず、実は僕はDOSの経験が無いんであまりハッキリした事は言えんのですが・・・。
原則的に当時のPCって、「端末にプログラミングする」んじゃなくって、直接ハードウェア的に画面制御してた例が多かったんじゃないかな・・・・・・。
Apple IIからはじまってpoke命令ってのがあったんですよ。そうするとプログラミング言語(例えばBASIC)から座標を指定して描画とかが出来たんです。
んでその辺割にむき出しだったんで、その周辺はアセンブリなり機械語で操る事が出来た・・・。
多分、民生機で今で言うAPI使ってプログラミングせなあかん、ってなったのはApple Macintoshが最初なんじゃないかな。これで直接画面をプログラミングするのを禁止するような環境になった。
確か当時のプログラマの卵達が、

「DOSは自由にプログラム可能だけど、Apple Macintoshは何やるにしても制限が加わるから嫌だ」

とか言ってた気がします。
(今じゃWindowsもAPIだらけ、だけど)

UNIXは割に、登場してからしばらくの間、

「Apple IIでも出来るような画面制御やキーボード制御が出来ない」

OSでした。
これはある意味仕方がなく、と言うのも当時、Apple IIはApple IIでしかなく、TRS-80はTRS-80でしかなかったんですが、UNIXはいろんな会社から出ている各種ミニコン上を横断して使われないとならない環境だった。ところがハードウェア部分、特にモニタへの出力やキーボードからの信号が全社同じ設計をしてると言う保証がないのです。
これらバラバラのブツを統一して・・・として作られたライブラリがCurses、です。Curseは英語で「呪い」なんで、このライブラリ名見るとドキっとしますね。
Cursesはホントはcursor optimization(カーソル最適化?)に由来する、とか言いますが、何だろ、当時のハッカーの悪質なジョークが礎となってる命名法だ、って言った方が正しいような気がする・・・・・・。
まぁ、いずれにせよ、C言語が生まれたUNIX上でC言語から端末画面の操作、そしてキー入力に自由に対応する為に生まれたライブラリがCursesです。
UNIXは元々ゲームを遊ぶために作られたOSだったくせに、長らくロクなゲームがなかったのですが、このCursesが作られてほぼ最初に作られたゲームが(UNIX出自のオリジナルじゃないにせよ)「トルネコの大冒険」の元ネタになったゲーム、Rogueです。前の画面写真はそれですね。

もしCursesが気に食わない場合。
多分No.1氏が言ってる事が正解なんです。
つまり、

「GUIの機能を使って自分で端末モドキを作っちゃう」

のが近道になるんじゃないかなぁ。
UNIX/Linuxの場合、端末エミュレータ自体がどんどん進歩してるんですが、生憎Windowsは多分そうじゃないんですよね。
いわゆるDOS窓は機能とか割に制限されててプログラミング対象としてはショボいんじゃないかしら・・・と言うより、DOSとの後方互換性を取る為に敢えてそうしてるんでしょうが。
そしてDOS窓はやっぱり端末エミュレータではあるんだけど、「直接画面制御してる」ようなソフトウェアじゃないんですよね。そうすると「思ったようにプログラミングする事が出来ない」以上、プログラム対象には向かない、って事になる。
そうすると、ちょくちょく見かけるんだけど、DOS窓頼らずに自分でWindow弄って「マイ端末」みたいなソフトにしちゃう、ってのが良くある手段だと思います。
例えば以下のソフトは・・・Cじゃなくって(多分)C#なんですが、往年のBASICのゲーム、スタートレックをWindowsに移植したモノです。

Yossy Star Trek:
http://yossysoft.com/Page/Yossysoft/Yossy_StarTr …

これもおそらく「自作端末」です。つまりGUIとしてWindowを組み立てて、端末をプログラムしてる。そしてその上でゲームをプログラミングしてるんですね。
多分そうでもしないと、DOS窓だと思ったようにプログラム出来ないから、でしょう。加えると、当時のDOSと違って今のOSはマルチタスク環境なんで、何らかの制御を全部一つのプログラムに全部取られるのもマズいですしね。
・・・まぁ、元々Star Trek自体は貴方の言う

「文字だけが画面を縦に流れていくタイプ」

のゲームだったんですが、結局、比較的今っぽいゲームでもそのままDOS窓使ってプログラミングするのは厄介なので、GUIを利用して自作端末モドキ作った方が色々と早い、って事になっちゃうようです。
と言うわけで現代的なPCでは、基本的な解決策は次の2つでしょう。

1. Cursesライブラリを使ってみる
2. GUIライブラリを使って自作端末エミュレータを作成してそれ対象でプログラムする

写真: 現在のDOS窓だと画面を分割してタイリングウィンドウみたいにして個々で制御するのも難しいと思う。過去のPCがこれをやってのけれたのは、要するに低レベルで画面を直接制御してたから、に過ぎない。
(また、当時の、特にゲームのプログラムは、OSを無視した・・・と言うより使わないようなブツもしばしば存在した)
「Cで本格的なプログラムを作りたい」の回答画像6
    • good
    • 0
この回答へのお礼

No.2さんですね、再びのご回答、誠にありがとうございます。

Cursesについての奥深いお話をありがとうございます。

また、スタートレックのゲームのお話もありがとうございます。実は、私の希望の一つが、昔のN88BASICのプログラムをCに移植したい、というものなのです。N88BASICのプログラムのソースが大量に残っていますので。内容は、物理のシミュレーションをするもので、DOSの真っ黒な画面上でですが、結構本格的に点と線を使ってグラフィカルに動作していました。

> 1. Cursesライブラリを使ってみる
> 2. GUIライブラリを使って自作端末エミュレータを作成してそれ対象でプログラムする

1.は、No.2でご紹介頂きましたが、2.について質問です。ここでいう「GUIライブラリ」とは、具体的に何を指すのでしょうか。また、その具体的入手法についてご教授くださいませんでしょうか。

何度もお世話になり恐縮ですが、よろしくお願い致します。

お礼日時:2021/04/19 18:51

C で GUI したいということなら


これかな。
「プログラミングWindows第5版」所謂ペゾルト本。かつての Windowsプログラミングのバイブルです。

https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%8 …

Windows の Win32 API を使ったプログラミングを基礎の基礎から
懇切丁寧に教えてくれます。

今時 Windows の GUI は .NET + C# とかが主流なので、
実務的価値はないですが、Windows の動作の基本部分を
詳細に触れることができるので、とてもとても勉強になります。
仕入れた知識は他のGUIシステムでも役立ちます。

但し、Windows を表示するだけで100行以上のコードがいるとか
うんざりするほど詳細にコードを書かなければなりません。

手っ取り早くプログラムが組みたいというのとは対極の
プログラミングになります。

本格的な GUI プログラムを手早く簡単に体験したいなら
C ではちょっと無理。C# + .NET がとても楽で簡単です。

簡便な GUI なら Python + tkinter もとても楽です。
ボタン1個貼り付けたウィンドウを表示するだけなら、以下の7行

電卓くらいなら簡単に作れます。

import tkinter as tk
root = tk.Tk()
def pressed():
 print("押されました!")

b = tk.Button(text='押してね', command=pressed)
b.pack()
root.mainloop()
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

これは、CではなくてC++ですか? C++も勉強中ですので、参考にさせて頂きます。

ありがとうございました。

お礼日時:2021/04/19 18:36

>昔の(Windows95が出る前の)一太郎とかLotus1-2-3みたい...



http://7ujm.net/etc/esc.html

エスケープシーケンスを使ったprintf()関数だけで画面表示の全てをあなたのコントロール下に置くことができます。

●Windows APIのような簡単にと言うか、わけの解らないと言うべきか、ウインドウが表示されることはなく、一つの文字の表示位置/色、バックグラウンドの配色、全てをコントロールします。
上のurlには簡単な例も載っていますので参考になるでしょう。またキーワードが解ればいくらでも類似urlを探せるでしょう。

●今でも組み込みプログラムを書く人は、簡単なモニターを扱う際にこの手法を使うはずです。

●ご質問者様が仰るように「昔の(Windows95が出る前の)一太郎とかLotus1-2-3みたい...」とても複雑な画面表示も可能ですが、但しご自身で全部製作しなければならず、それなりの手間がかかります。
それでも、それなりの達成感を得られるプログラムができることうけあいです。

● printf()関数で画面表示を行う限り、VisualStudioとその他のC言語実行環境(Linuxなど)で殆ど差のないソースコードができるはずですが、VisualStudioでC標準関数を使用する限り、移植性は低下します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

リンク先を一読して、エスケープシーケンスについてちょっと調べてみましたが、

> Windows OS上のコマンドプロンプト画面においてエスケープシーケンスを有効にするためには、ANSI.SYSを組み込む必要があります。そのためには、ファイルconfig.sysに次の一行を追加します。また、コマンドプロンプトにはCOMMAND.EXEを使います。
devicehigh=%SystemRoot%\system32\ANSI.SYS

とありました。これは、CONFIG.SYSを書き換えて再起動する、という事なのでしょうか。
(昔、MS-DOS時代にはよくやっていましたが。)
もし違っていれば、Windowsのコマンドプロンプトでエスケープシーケンスを使う方法をご教示くださいませんでしょうか(自分でも調べますが)。

> ● printf()関数で画面表示を行う限り、VisualStudioとその他のC言語実行環境(Linuxなど)で殆ど差のないソースコードができるはずですが、VisualStudioでC標準関数を使用する限り、移植性は低下します。

この部分がよく分かりませんでした。printf()関数は、C標準関数ではないのでしょうか。

おっしゃる通り、なるべく移植性の高い方法を身に着けたいです。

ありがとうございました。

お礼日時:2021/04/19 18:29

要は、ターミナル内で動作するテキストベースのプログラムを作りたいということですか?


もしそうなら、特別なGUIベースの環境がなくてもできます。

ターミナル内でメニューを表示して、標準入力からの入力を待つ。入力があったら、ターミナルをクリアして新しい出力画面を表示する。これの連続です。
ターミナルをクリアせずに新しい出力を追加していきたいのなら、ターミナルをクリアしなければいいだけです。

以前、あまりに暇だった日曜日に、スターバックスでコーヒーを飲みながら、Perlで「倉庫番」のプログラムを書いたことがあります。所要時間は3時間くらい。ターミナル上で表示はすべてテキスト、「画像」もテキストベースで、一手動かすたびに画面をリフレッシュして新しい画面を表示という簡単なしくみです。Perlのみで他のGUIベースの環境は使っていません。
Cでも同じことはできます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

テキストベースの画像だけでなく、点や直線・曲線などを自在に描かせることはできるでしょうか。要は、昔の(Windows95が出る前の)DOSベースのソフトみたいに、Windowsを介さないでxy平面のグラフを描かせたりできればやりたいと思っています。当然、道は遠いでしょうが、遠くとも達成できる手段があるのかどうか、あるのであればどのようにアプローチすれば達成できるのかを知りたいと思っています。

ご存じであれば、ご教授願います。

お礼日時:2021/04/19 08:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング