HOME»基本情報技術者試験掲示板»平成30年春期午後問9
投稿する
プログラムはレコードを順番に1つずつ読み込んでinBufに格納→処理を繰り返しているだけです。レコードは固定長の並びであり、キー項目や数値項目の開始位置はどのレコードも同じなので、開始位置を最初に指定しておけばすべてのレコードについて同じ処理を行えます。
そもそもinBufは1次元配列です。inBufはすべてのレコードの情報を格納しているわけではありません。
この箇所で最初のレコードを読み込みます。
2つ目以降のレコードはここで読み込みます。while文の条件式の評価の都度、fgetsでレコードの読込みを行うイメージです。ファイル内のレコードをすべて読込み終えたかどうかはfgetsの返り値(NULLかそうでないか)で判断します。
平成30年春期午後問9 [3851]
パスさん(No.1)
https://www.fe-siken.com/kakomon/30_haru/pm09.html
プログラム1の処理部分で、処理対象レコードの行数の遷移についての質問です。
関数fgets/strncpy/strcmp の部分で{ inBuf + (keyPos/valuePos) }を用いて読み込み開始位置を指定しているのは理解できるのですが、どうしてレコード〇行目での読み込み開始位置という風に指定できるのか分かりません。
inBuf[i][recSize]でiの部分を回して処理をしているみたいな理解でいいのでしょうか。
プログラム1の処理部分で、処理対象レコードの行数の遷移についての質問です。
関数fgets/strncpy/strcmp の部分で{ inBuf + (keyPos/valuePos) }を用いて読み込み開始位置を指定しているのは理解できるのですが、どうしてレコード〇行目での読み込み開始位置という風に指定できるのか分かりません。
inBuf[i][recSize]でiの部分を回して処理をしているみたいな理解でいいのでしょうか。
2021.11.17 13:17
chihiroさん(No.2)
★FE プラチナマイスター
>どうしてレコード〇行目での読み込み開始位置という風に指定できるのか分かりません。
プログラムはレコードを順番に1つずつ読み込んでinBufに格納→処理を繰り返しているだけです。レコードは固定長の並びであり、キー項目や数値項目の開始位置はどのレコードも同じなので、開始位置を最初に指定しておけばすべてのレコードについて同じ処理を行えます。
>inBuf[i][recSize]でiの部分を回して処理をしているみたいな理解でいいのでしょうか。
そもそもinBufは1次元配列です。inBufはすべてのレコードの情報を格納しているわけではありません。
2021.11.17 14:48
パスさん(No.3)
chihiro さん 返信ありがとうございます。
というところなのですが、プログラムのどの部分でレコードを順番に読み込んでいるのかおしえていただきたいです。対象レコードの遷移はwhile(fgets(inBuf,recsize,inFile)!=NULL)でfgets()が呼びだされた回数だけ行われるという理解であってますでしょうか。
>プログラムはレコードを順番に1つずつ読み込んでinBufに格納→処理を繰り返しているだけです。
というところなのですが、プログラムのどの部分でレコードを順番に読み込んでいるのかおしえていただきたいです。対象レコードの遷移はwhile(fgets(inBuf,recsize,inFile)!=NULL)でfgets()が呼びだされた回数だけ行われるという理解であってますでしょうか。
2021.11.17 15:33
chihiroさん(No.4)
★FE プラチナマイスター
>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さん ありがとうございました。
chihiroさん ありがとうございました。
2021.11.17 17:35