ルイ さんが書きました: ↑6年前
・seisekiはint型なのに0.6をかけたらdouble型にならないのでしょうか。
int型の変数にdouble型の数をかけたら確かにdouble型になります。
そして、int型の変数に格納するときは自動的にint型に変換されます。
オフトピック
ただし、double型に変換される前に割り算をしており、切り捨てられる可能性があるのは心配ですね。
ルイ さんが書きました: ↑6年前
・メモリを確保..とありますが100回繰り返したら結局100名分の構造体配列を用意するのと一緒なのではないのでしょうか。
一緒ではありません。
むしろポインタ配列(や動的メモリ確保システムのオーバーヘッド)の分だけ
100名分の構造体配列を用意するよりメモリ使用量は多くなります。
オフトピック
ただし、このプログラムでは100名分確保しても普通の環境では10KBにもならないはずであり、
現代のパソコンでは全く問題にならないはずです。
ルイ さんが書きました: ↑6年前
・標準入力が終了したら以下のような処理でよろしいでしょうか。
if (dataRead(pg[i]) == EOF) { /* 標準入力が終了したら */
num = i;
break;
}
dataRead関数の実装によります。
現在のgets関数の戻り値(のポインタをint型に変換した値)を返す実装の場合、
gets関数は読み込みに失敗したときはNULLを返し、int型に変換すると0になる可能性が高いので、
EOFと比較して終了判定するのはよろしくないです。
オフトピック
* gets関数はバッファオーバーランのリスクを潰せないので使ってはいけないとされる
* そもそも文字列を入力するためのgets関数に構造体へのポインタを渡すのは不適切と考えられる
というのはおいといて。
ルイ さんが書きました: ↑6年前
最後に、そもそもの質問なのですが、このプログラムの動作は一気に数人分のデータを標準入力してエンターが押されたときに表示の処理に移るという仕組みなのでしょうか。
そのような仕組みではないと考えられます。
* 表示の処理の前に全員分のデータを読み込みます。
「数人分」かはデータの数とどの程度を「数人」とみなすかによります。
* 「標準入力」するかはdataRead関数の実装によります。 (gets関数は標準入力から読み込みます)
* 「エンターが押されたときに表示の処理に移る」かどうかはdataRead関数の実装によります。
現状のgets関数を用いた実装で、標準入力をキーボードから読み込んでいる場合、
エンターではなく(一般的には)WindowsではCtrl+Z、LinuxではCtrl+Dが押されて
入力が終了となった時に表示の処理に移るはずです。