ページ 1 / 1
値の読み取り関数
Posted: 2010年11月03日(水) 15:57
by sk
skです。よろしくお願いします。
画像のPGMファイルから値を読み取る関数が以下のように作られています。
/*********************
値読み取り関数
*********************/
void getoneword(FILE *fp, char *word)
{
fscanf(fp, "%s", word);
if(word[0]=='#'){
while(word[0]!=10){
word[0]=(int)fgetc(fp);
}
fscanf(fp, "%s", word);
}
}
このifとwhileがそれぞれどのように処理されているのか良く分かりません。
(特に'#'は何を示しているのか。)
どなたかご教授よろしくお願い致します。
Re:値の読み取り関数
Posted: 2010年11月03日(水) 16:27
by Poco
PGMファイルは行頭に#があった場合、その行はコメントとみなします。
上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
Re:値の読み取り関数
Posted: 2010年11月03日(水) 17:27
by sk
>>ぽこさん
ご教授有難うございます。
void getoneword(FILE *fp, char *word)
{
fscanf(fp, "%s", word); //ここは値(コメント以外)を読み込む
if(word[0]=='#'){ //もしコメントがあったら
while(word[0]!=10){
word[0]=(int)fgetc(fp);
}
fscanf(fp, "%s", word);//改行コードまで読み飛ばす
}
}
といった感じでしょうか?
しかしwhileとfgetcの部分は一体何を示しているのでしょうか?
int型にキャストしている理由もよくわかりません。
質問がおおくなって申し訳ございません。
Re:値の読み取り関数
Posted: 2010年11月03日(水) 20:00
by Poco
> しかしwhileとfgetcの部分は一体何を示しているのでしょうか?
改行コードまで読み飛ばしている部分です。
Re:値の読み取り関数
Posted: 2010年11月03日(水) 20:53
by sk
>>ぽこさん
自分で調べてみたらキャストした理由がわかりました!
ヒントというかほぼ答えでしたね笑
有難うございました。
Re:値の読み取り関数
Posted: 2010年11月04日(木) 03:15
by フリオ
ちょっと気になったので、
>上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
"改行まで読み飛ばす"ことを意図しているのは推測出来ますが、
提示されたコードだけでは、"文字コードが 10 の文字まで読み飛ばす"であり、
それが改行であると断定できないのでは?
>自分で調べてみたらキャストした理由がわかりました!
fgetcの戻り値はintなのにそれをわざわざintにキャストしている理由は何なのでしょうか?

Re:値の読み取り関数
Posted: 2010年11月04日(木) 22:20
by Poco
> >上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
> "改行まで読み飛ばす"ことを意図しているのは推測出来ますが、
> 提示されたコードだけでは、"文字コードが 10 の文字まで読み飛ばす"であり、
> それが改行であると断定できないのでは?
Cの仕様からは断定できません。
私の経験で断定しているだけです。