平成30年春期午後問9

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
パスさん  
(No.1)
https://www.fe-siken.com/kakomon/30_haru/pm09.html


プログラム1の処理部分で、処理対象レコードの行数の遷移についての質問です。

関数fgets/strncpy/strcmp の部分で{ inBuf + (keyPos/valuePos) }を用いて読み込み開始位置を指定しているのは理解できるのですが、どうしてレコード〇行目での読み込み開始位置という風に指定できるのか分かりません。

inBuf[i][recSize]でiの部分を回して処理をしているみたいな理解でいいのでしょうか。
2021.11.17 13:17
chihiroさん 
FE プラチナマイスター
(No.2)
>どうしてレコード〇行目での読み込み開始位置という風に指定できるのか分かりません。
プログラムはレコードを順番に1つずつ読み込んでinBufに格納→処理を繰り返しているだけです。レコードは固定長の並びであり、キー項目や数値項目の開始位置はどのレコードも同じなので、開始位置を最初に指定しておけばすべてのレコードについて同じ処理を行えます。
>inBuf[i][recSize]でiの部分を回して処理をしているみたいな理解でいいのでしょうか。
そもそもinBufは1次元配列です。inBufはすべてのレコードの情報を格納しているわけではありません。
2021.11.17 14:48
パスさん  
(No.3)
chihiro さん  返信ありがとうございます。
>プログラムはレコードを順番に1つずつ読み込んでinBufに格納→処理を繰り返しているだけです。
というところなのですが、プログラムのどの部分でレコードを順番に読み込んでいるのかおしえていただきたいです。対象レコードの遷移はwhile(fgets(inBuf,recsize,inFile)!=NULL)でfgets()が呼びだされた回数だけ行われるという理解であってますでしょうか。
2021.11.17 15:33
chihiroさん 
FE プラチナマイスター
(No.4)
>if(fgets(inBuf,recsize,inFile)!=NULL)
この箇所で最初のレコードを読み込みます。
>while(fgets(inBuf,recsize,inFile)!=NULL)
2つ目以降のレコードはここで読み込みます。while文の条件式の評価の都度、fgetsでレコードの読込みを行うイメージです。ファイル内のレコードをすべて読込み終えたかどうかはfgetsの返り値(NULLかそうでないか)で判断します。
2021.11.17 15:59
パスさん  
(No.5)
理解できました。

chihiroさん  ありがとうございました。
2021.11.17 17:35

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop