コンソールアプリケーションを作ろう
[Japanese Pocket C User's Page]-[Tips!]
まずは、GUIなどを利用しない簡単なコンソールアプリケーションの作り方を紹介します。
前提条件としまして、PocketC
ヘルプの言語の章は目を通しておいてください。
1.コンソールアプリケーションとは?
コンソールアプリケーションとは、ウィンドウやボタンを使わずに、
テキスト表示のみのアプリケーションをさします。
ウィンドウを使ったプログラムは慣れるまで難しいので、
まずはコンソールアプリケーションを使って、
・データ型の扱い
・if文などの条件分岐の使い方
などをしっかり身につけましょう。
2.サンプルプログラム
早速、コンソールに関する関数を利用したサンプルプログラムを
紹介します。
(プログラム名:console.pc)
// コンソールアプリケーションのサンプル // written by まつし 2000/3/27 通勤中に作成 main() // 1)本体はmain関数 { string ans;// 2)main関数内のローカル変数ansを定義 puts("改行をしていません。"); puts("エスケープシーケンスをつけました。\r\n");// 3)-aエスケープシーケンスで改行 puts("charの13,10をつけました。"+(char)13+(char)10);// 3)-b コードで改行 putsl("putslを使いました"); puts("putsを使いました"); putsl("putslを使いました"); graph_off();// 4)コンソール画面を表示 putsl("コンソールを表示しました"); ans=gets("メッセージを入力してください");// 5)文字の入力 putsl(ans); ans=gets("コンソールをクリアしますか?(yでクリア)"); if (ans=="y") // 6)if文による条件分岐 { clear(); // 7)clear関数で画面をクリア puts("コンソールをクリアしました"); } else { puts("コンソールのクリアを取りやめました"); } }
3.解説
プログラム上のポイントをいくつかあげます。
1)本体はmain関数
プログラムの初めにmain続いて { }で囲まれた部分があります。
これがmain関数で、プログラムが実行されたときに呼び出される箇所です。
ヘルプにも説明がありましたね。
2)main関数内のローカル変数 ansを定義
main関数の初めで、ansという文字列型の変数を定義しています。
関数の内部で定義されていますので、この変数はmain関数内でのみ有効な
ローカル変数です。
3)コンソールに表示を行う命令 putsとputsl
コンソールに表示をする関数として、putsとputslを利用しています。
putsは改行をしないので、次にコンソールへ表示する命令が出たら、
続いて表示されます。これに対し、putslは改行を行うため、
次にコンソールへ表示する命令が出た場合は改行されて表示されます。
なお、putsを使った場合でも、改行をあらわすCR+LFを直接書き込めば、
putslと同じ効果を得ることができます。
サンプルでは、次の2つの方法で試しています。
a:特殊文字に対するエスケープシーケンスを使う方法
b:キャラクターコードを直接指定する方法
サンプルにある(char)13のようにデータ型を括弧で囲むと、
その後ろの値を括弧で囲まれたデータ型にしてくれます。
ansi C ではprintfとかを使うのですが、
残念ながらPocketCでは使えないようです。
4)コンソールを画面に表示するには?・・・graph_off関数を使う
putlなどを実行しただけでは、画面に表示されません。
コンソール画面を表示するためには、[File]-[Show
Console]を選択するか、
graph_off関数を呼び出す必要があります。
5)文字の入力・・・gets関数
文字の入力にgets関数を利用しています。gets関数によってインプットダイアログが表示され、
その結果の文字列を先ほど定義した文字列ansに代入しています。
6)if文による条件分岐
if文により、文字列ansの値が"y"かどうかにより条件分岐を行っています。
正しければはじめの{ }で囲まれた中を、ことなれば、else
の後の{ }で囲まれた部分を実行しています。
7)clear関数で画面をクリア
if文の条件分岐の中で、文字列ansの値が"y"の場合、
clearという関数により
コンソール画面をクリアするため、画面上にはその次のputs関数で表示される
「コンソールをクリアしました」
しか表示されていません。
ちょっと説明がくどすぎたかも知れません。
4.おさらい
ここでは、次の事を確認しました。
・コンソールに関する関数の使い方(入力、出力、クリア、コンソール画面の表示方法)
・if文の使い方
・データ型を明示した代入
まだまだ簡単ですね。
5.あらら・・・うまくいかない
このサンプルを実行したときに、console上に正しく表示されないことがあるようです(E-55にて確認)。
原因は不明ですが、処理速度がおいついていないためと思われます。
putsとgetsの間にsleepをいれることによって回避することが出来るようです。
<修正例>
ans=gets("メッセージを入力してください");// 5)文字の入力
putsl(ans);
sleep(0); //この行を追加しました
ans=gets("コンソールをクリアしますか?(yでクリア)");