• ベストアンサー

MacOSX で getche() と同じ能力をもった関数

初めましてC言語をMacOSXで勉強しております。独習Cというテキストを参考にしておりますが、conio.h ヘッダの getche() 関数を多用しております。OSXではこの関数を使う事ができませんが、それと同等な関数は用意されているのでしょうか。基本的な事で恐縮ですが、どうぞよろしくお願いいたします。 また、OSXでC言語を学習する上で他のコンパイラなどとの相違、注意が必要な部分などございましたらどうぞご教授ください。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

conio.hは、Winodws系でのみ提供されているライブラリ関数ですので、Mac OS X(gcc)では提供されてません。 stdioかncursesとかで同じ関数を自作するか、書き換える必要があります。 Mac OS Xの特異なところは、 ・Mach ・Objective-C ・Cocoa/Carbon ――などありますが、C言語処理系としてgccを採用してますから、Cの初級レベルでは、とくに他と変わるところはありません。

参考URL:
http://www.wence.vandermeersch.org/gconio/
jsbach_2005
質問者

お礼

有り難うございました。実際にやってみまして、gconio.hがインクルードできることを確かめました。少しずつですが前進しつつありまして、嬉しく思っています。有り難うございました。

jsbach_2005
質問者

補足

有り難うございます。参考URLを拝見いたしました。ヘッダファイルを追加する作業は初めてなのですが、usr/include/以下にダウンロードした gconio.h を配置すれば include する事ができるようになる、ということですね。このように非標準のヘッダをどんどん追加してゆく事でこれから先何かトラブルなど生じるのでしょうか(例えば何かヘッダ同士で不具合が生じる?等、初心者ですので質問も的外れかもしれませんが)。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

本来ならncursesでというところなのですが、ncursesを使ってgetcheをエミュレートできるぐらいなら、入門書なんか読んでいませんよね。 有効な解決策はちょっと見つかりません。むしろ、このような非標準ライブラリに依存したコードを書くと、今回のような問題が発生するということを学習してください。(今回は質問者さんが悪いのではなく、「独習C」が悪いのです) > また、OSXでC言語を学習する上で他のコンパイラなどとの相違、注意が必要な部分などございましたらどうぞご教授ください。 学習段階では、なるべく標準ライブラリのみを使いましょう。その後、OSXに特化したプログラムを書きたいときになって初めて、専用のライブラリを学習するとよいでしょう。最初から特定環境に依存してしまうと、つぶしがきかなくなります。

jsbach_2005
質問者

お礼

有り難うございました。getchar()のみを使い、教則本の意図からは離れていますがgetche()で表れてきた課題を色々と組んでみました。おかげでgetchar()の使い方に理解が深まったと思っています。マイナスに考えずにある物で(標準ライブラリ)最大限にやろうと思います。

関連するQ&A

  • cprintf()関数で2バイト文字を表示するには

    cprintf()関数の引数に2バイト文字を含む文字列を指定してプログラムを 実行すると、表示結果の2バイト文字の部分が全て文字化けしてしまいます。 cprintf()関数で2バイト文字を表示することはできないのでしょうか? ご教示宜しくお願い致します。 下記は実際に文字化けしてしまうコードです。 ---------------------- #include <conio.h> int main(void) { cprintf("日本語 English"); return 0; } ---------------------- 【環境情報】 使用コンパイラ:VC++2008 実行環境:WinXPSP2とVistaHomePremiumSP1の2環境で確認 【質問の背景】 『独習C 第3版』という本の中に、一部のコンパイラでは、getche()の ような非標準の入出力関数とprintf()などの標準の入出力関数を併用 すると問題が発生すると記載されており、printf()関数の代わりに cprintf()関数を使用したサンプルコード(上記のコードとは異なる)も記載されています。 しかし、実際にそれをコンパイルして実行してみると、2バイト文字が 全て文字化けして表示されてしまいました。

  • 標準入力の違い

    今C言語の学習を行っています。 そこで、文字入力の学習を行っていますが、 getchar() getche() で改行(¥n)の取得値が異なります。 getchar() => 0x10 getche() => 0x13 改行復帰という言葉があるのはわかるのですが、 なぜ、getchar()のほうは、0x10で見えるのでしょうか?

  • C言語の関数を分かりやすく説明してください。

    C言語を学習しています。 C言語の入門書を読んでいて、どうしても関数のこと(引数とか戻り値とか自作関数についてのこと)が分かりませんでした。ネットで調べてみたりもしたのですが分かりませんでした。 かみ砕いて説明していただけるとありがたいです。

  • C言語でプロセスを処理するプログラムを考えています。

    C言語でプロセスを処理するプログラムを考えています。 popenを使ってプロセスを起動しようとしたですが、popenが未定義の関数とエラーが出てコンパイルできません。 ヘッダにstdio.hはおいてあります。 コンパイラはborlandを使用しています。 よろしくお願いします。

  • フレンド関数を利用したオーバーロードでコンパイルエラー

    独習C++(第3版)で学習していますが、書籍通りに入力してもコンパイルエラーが出てしまい、困っております。 P.199 6.5.フレンド演算子関数の使用にあるソースコードをそのままコピーしただけです。 フレンド関数を利用し、演算子オーバーロードをすると、コンパイルエラーが発生してしまうようです。 (10): friend coord operator+(coord ob1,int i); C:\jsp\tools\samp13\XXXX.cpp(10) : fatal error C1001: 内部コンパイラ エラー (コンパイラ ファイル 'msc1.cpp', 行番号 1786) Visual C++ のサポート情報 コマンドを選択してください ヘルプ メニュー、 またはサポート情報のヘルプ ファイルを参照してください 少し検索したところVC++6.0だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?

  • C言語のヘッダファイル

    前回のC言語のコンパイラの質問で、たくさんのご回答ありがとうございました。 おかげさまでコンパイラはなんとかなりそうですが、ひょっとしたらまた同じ質問を載せるかもしれません(^^; 今回はC言語のヘッダファイルを自分で作ってみたいんですが、よくわかりません。 microsoft visual studioのvisual c++付属のINCLUDEフォルダにある、stdio.hを開いてみたのですが、基本のprintf()やscanf()なども、どう定義されているか わからず終いでした。本などでもいまいち詳しく書いていなく(そう思うのは僕だけ?)、困っています。c言語のヘッダファイルとc++のヘッダファイルは やっぱり別ものなんでしょうか?ご回答おまちしております。

  • C言語習得のネックは・・・

    プログラミングの独習を始めます。まずC言語です。あす、テキストが届くのですが、C言語学習の難しい部分はどういうところでしょうか。海外生活が長いので英語は大丈夫だと思っていますが。

  • リエントランスな関数

    最近、リエントランス(re-entrance)な関数という言葉を聞きました。 恥ずかしながら、全然意識したことのない言葉でした。 C言語の標準ライブラリには、リエントランスな関数とそうでない関数があると聞いたのですが、それを調べるにはどのようにしたら良いでしょうか? ANSIの仕様で決まっているのでしょうか? それとも、コンパイラ依存なのでしょうか? 参考書とかHPとかを紹介していただけるとありがたいです。 よろしくお願いします。

  • C言語のヘッダーファイルの意味と使い方

    現在、C言語を学習ちゅうです。以下のヘッダーファイルの意味と使い方、後、読み方も教えて下さい。 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <tchar.h> #include <ctype.h> #include <string.h> 後、カウンター変数の意味と使い方も知りたいです。

  • プログラミングの参考書籍のことなんですけど

    最近プログラミングをはじめて最初はHSPからはじめました。3か月ほどやって簡単なツールを作成するところまでできました。 まだ中学生なんですけど将来的に役に立つような言語をやりたいので、 手始めにC#をやっています。次にC言語その次にC++に手を出そうと考えています。 ネットだけでは学習しにくいので初めて書籍なるものを購入しようと考えています。 そこで結構評判のよかった 独習C# と やさしいC と 独習C++ を購入しすることにしました。 疑問があるのですが 独習 シリーズには 第2版などがあるのですが それはどういうことなのでしょうか?第1の続きという意味でいいのでしょうか? ご回答よろしくお願いいたします。