2015年 秋 FE 問9、
設問2
f, g。
Level %d --> %d
この、%d に、何が 入るかという とい。
印字結果を 見ると、
○Level 1 --> 2
Level 3 --> 2
と ありました。
○レベル 1 の 部屋から、
レベル2の 部屋に 入る データが
ありませんよ、という 表示。
普通なら、
before --> after
ですが、ちょっと 込み入って まして、
level --> beforeLevel
が、正解でした。
さすがに、
after --> before
では、おかしい。
なので、
最初の after ではなく、
他のもの。
doorLevel
は、固有名詞なので、
変数の
level … 現在の部屋レベル (注記より)
が、妥当かなと。
アバウトですが、
そういう 解答群の 読み方も
あるのかな、と思いました。;)
追伸 1
level --> beforeLevel
後ろが before に なるのは、
論理で。ここは 丁寧に 見ていきます。
サンプル プログラム
#include <stdio.h>
#include <string.h>
FILE *logFile;
int logEOF = 0;
char cardID[5] = "----", date1[9] = "--------", time1[7] = "------",door[3] = "--",
dir[2] = "-", act[2] = "-", name[11] = "----------";
char lastID[5] = "----";
int level = 0;
void getRecord();
void putRecord();
void checkLevel();
void clearLevel();
int main()
{
logFile = fopen("Access.Log", "r");
getRecord();
while (logEOF != EOF){
putRecord();
getRecord();
clearLevel();
}
fclose(logFile);
}
void getRecord(){
if (fscanf(logFile, "%4c %8c %6c %2c %1c %1c %10c\n",cardID, date1, time1, door,
dir, act, name) == EOF)
{logEOF = EOF;}
}
void putRecord(){
int putSpace;
if (strcmp(cardID, lastID) == 0)
{printf("%18s", " ");}
else {
printf("%4s %10s ", cardID, name);
strcpy(lastID, cardID);}
checkLevel();
putSpace = door[0] - '0' - 1;
while (0< putSpace--){
printf("%20s", " ");
}
printf("%.2s-%.2s %.2s:%.2s %2s ",date1+4, date1+6, time1, time1+2, door);
if (strcmp(act, "R") == 0){ printf("%s", "(R)");}
if (strcmp(dir, "I") == 0){ printf("%s\n", "IN");}
else { printf("%s\n", "OUT");}
}
void checkLevel(){
int afterLevel, beforeLevel, doorLevel;
doorLevel = door[0] - '0';
beforeLevel = doorLevel;
afterLevel = doorLevel;
if ( strcmp( dir, "I" ) == 0)
{ beforeLevel = doorLevel - 1; }
else
{ afterLevel = doorLevel - 1;}
if ( strcmp( act, "R" ) == 0 )
{ afterLevel = beforeLevel; }
if ( level != beforeLevel )
{ printf("***** Level %d-->%d\n%18s", level, beforeLevel, " "); }
level = afterLevel;
}
void clearLevel(){
if ( logEOF == EOF || ( strcmp( cardID, lastID ) != 0 ))
{ if ( level > 0 ) { printf("%18s***** Level %d-->0\n", " ", level);
level = 0;}
}
}
データ ファイル ( C言語 )
Access.Log
T001 20151018 100024 11 I A Test Use 1
T001 20151018 102028 31 I A Test Use 1
T001 20151018 104032 21 O A Test Use 1
コメント