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:値の読み取り関数
PGMファイルは行頭に#があった場合、その行はコメントとみなします。
上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
Re:値の読み取り関数
>>ぽこさん
ご教授有難うございます。
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型にキャストしている理由もよくわかりません。
質問がおおくなって申し訳ございません。
ご教授有難うございます。
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:値の読み取り関数
ちょっと気になったので、
>上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
"改行まで読み飛ばす"ことを意図しているのは推測出来ますが、
提示されたコードだけでは、"文字コードが 10 の文字まで読み飛ばす"であり、
それが改行であると断定できないのでは?
>自分で調べてみたらキャストした理由がわかりました!
fgetcの戻り値はintなのにそれをわざわざintにキャストしている理由は何なのでしょうか?
>上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
"改行まで読み飛ばす"ことを意図しているのは推測出来ますが、
提示されたコードだけでは、"文字コードが 10 の文字まで読み飛ばす"であり、
それが改行であると断定できないのでは?
>自分で調べてみたらキャストした理由がわかりました!
fgetcの戻り値はintなのにそれをわざわざintにキャストしている理由は何なのでしょうか?

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