正の整数をキーボードから読込み、それをファイルにして保存するプログラムを作りなさい。ただし、プログラムは負の整数が入力されたときに終了する仕方が全くわからないので教えてください。
編集 削除うみゅ?
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
V: Integer;
F: TextFile;
begin
Read(V);
if V<0 then Exit;
AssignFile(F,'ファイル');
Rewrite(F);
Write(F,V);
CloseFile(F);
end.
作ってみました。
これは課題ですか?
これだけでは、GUIなのかCUIなのかわかりませんね。
GUIだと結構面倒です。キーボードから読み込むとなると、メッセージを取得して文字に変換していかなければならないので。
CUIであれば、次のような流れになります。
1.ファイルを開く
2.負数が入力されるまで繰り返し。負数が入力されたら5へ。
3.正の数が入力されたらファイルに出力
4.2に戻る。
5.ファイルを閉じる
6.終了。
delphiを前提にしている場合
sysutilsにあるいくつかの変換関数を有効に使うべきだと思います。
(strtoint等)
CUIであるとかGUIであるとかはあまり関係ありません。
質問の前提として
抜けているものに数字でなくて文字が入力されたケースもあると思います。
状況としてリターンキーを押してデータ入力ということですから
1.Tstringlistあたりを作る。
2.入力イベントで動くイベントハンドラないしはinputBoxでの入力
3.文字列の数値変換
4.エラーチェック(非数値)
5.負数なら終了、正数ならリストに追加。
6.Tstringlist.SaveToFileメソッドで保存
あたりが初心者向きだと思います。
> CUIであるとかGUIであるとかはあまり関係ありません。
キーボードから読み取るとかかれているので、InputBoxは使えないと判断しました。
その場合、GUIとCUIで差異なく作成できるのでしょうか。
GUIの場合のreadは、リダイレクトによる入力は有効ですが、キーボードからの入力には対応していなかったと思います
CUI,GUIに関係なく、キーボードからの入力を取得する方法がありましたら教えてください。
正の整数をキーボードから読込み、それをファイルにして保存するプログラムを作りなさい。ただし、プログラムは負の整数が入力されたときに終了する。
1で作ったファイルを読込み、画面に出力するプログラムを作りなさい。
1で作ったファイルを読込み、別の名前のファイルとして保存するプログラムを作りなさい。
注)ファイルのコピープログラム
1のプログラムを使い、中身の違う2つのファイルを作りなさい。それらの2つのファイルを読込み、併せて1つのファイルとして保存するプログラムを作りなさい。
注)ファイルのマージプログラム
で作ってもらったやつですが、数字自体が入力できないのですがどうすればよいのですか?
あと、どこのファイルに保存されているのですか?
編集 削除保存先は自分で決めるのでは…。
というか、あまりに礼儀がなってないような気がしたので
思わず横槍してしまいました、すいません。
数字自体が入力できないとはどーいう現象が起きて入力できないか、
またどーいった環境で作業されているかを明確に伝え、
しっかりお願いして、御礼もしましょうね。
最低限のマナーですよ?
主題と若干ずれますがにしのさんの疑問への回答です。
確かに「CUI」といえばコマンドラインインターフェースなので
「インプットボックス」と言う表記は不適切でした。
しかし逆に知りたいと思っている「キー対応プログラム」はCUIではないといえます。
CUIでは根本的に「インプット関数」ぐらいは存在することを
前提にして良いのではないでしょうか。
私の言いたいのは「数値」として扱わず「文字」として扱えば
連結などのファイル操作や
IMEなどの誤動作や整数・実数などに対する変換処理もしやすいということです。
ファイルの入出力に関して古典的なDosプログラムではOSレベルでのマージを使うというのも手ですが
delphiベースの場合は適当な名前のテンポラリーファイルを作るか
データベースをつくるかして
そこで並び替えをさせるか
TfilestreamないしはTstringlistの入出力を利用する方が
手っ取り早くわかりやすいということをいいたかったのです。
ファイル名ですが単独フォルダーでやる場合はどうでも良いようにも思いますが
日付とか連番で唯一性を持たせるとつぶしが効きます。
(これはリソースにデータを圧縮して入れて置き一時展開するときに良く使う手)
又キーの入出力をベタにやるケースですが
DirectX5あたりのインターフェースで作ったDirectInputを使うと
幅広いOSで使え無難かつマウスの進化にも対応できます。
いいかえるならばDelphi3でもホイールマウスや5ボタンに対応できるということです。
全般的にあくまで最初の質問に対してではなく
質問に関連した情報リソースという位置付けで書いています。
> 全般的にあくまで最初の質問に対してではなく
> 質問に関連した情報リソースという位置付けで書いています。
なるほど、それなら合点がいきます。
私の場合、深読みしすぎて失敗したことがあるので、できるだけ文面に忠実に回答しています。
(別解が多すぎる、あやふやなど)読み切れない場合は、抽象的な答えにしています。
例えば勉強中で、まだCUIとGUIの区別もわからず、とりあえず'hello, world.'を表示するプログラムを作ろう、という人に対して、TFormにTLabelを貼り付け、Captionを設定する、などの説明をするのは無駄であり、混乱の元かと思います。
たぶん、Delphiというよりプログラミングの初歩の初歩で、それこそ、
・プログラムは基本的に上から順に実行されます
という部分を理解しようとしている段階なのだと思います。
勉強し始めは、往々にして無意味なプログラミングが多いものですので、この質問も、'hello, world'的なものでしょう。
もし、得られた回答が違うものであれば、再度別の言葉で説明してもらえば、また回答できますし。