値の読み取り関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sk

値の読み取り関数

#1

投稿記事 by sk » 14年前

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がそれぞれどのように処理されているのか良く分かりません。
(特に'#'は何を示しているのか。)
どなたかご教授よろしくお願い致します。

Poco

Re:値の読み取り関数

#2

投稿記事 by Poco » 14年前

PGMファイルは行頭に#があった場合、その行はコメントとみなします。
上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。

sk

Re:値の読み取り関数

#3

投稿記事 by sk » 14年前

>>ぽこさん
ご教授有難うございます。

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型にキャストしている理由もよくわかりません。
質問がおおくなって申し訳ございません。

Poco

Re:値の読み取り関数

#4

投稿記事 by Poco » 14年前

> しかしwhileとfgetcの部分は一体何を示しているのでしょうか?

改行コードまで読み飛ばしている部分です。

sk

Re:値の読み取り関数

#5

投稿記事 by sk » 14年前

>>ぽこさん
自分で調べてみたらキャストした理由がわかりました!
ヒントというかほぼ答えでしたね笑
有難うございました。

フリオ

Re:値の読み取り関数

#6

投稿記事 by フリオ » 14年前

ちょっと気になったので、
 
>上記プログラムは、行頭に#があった場合、改行コード(\n)まで読み飛ばす処理です。
 "改行まで読み飛ばす"ことを意図しているのは推測出来ますが、
提示されたコードだけでは、"文字コードが 10 の文字まで読み飛ばす"であり、
それが改行であると断定できないのでは?
 
>自分で調べてみたらキャストした理由がわかりました!
 fgetcの戻り値はintなのにそれをわざわざintにキャストしている理由は何なのでしょうか? 画像

Poco

Re:値の読み取り関数

#7

投稿記事 by Poco » 14年前

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

Cの仕様からは断定できません。
私の経験で断定しているだけです。

閉鎖

“C言語何でも質問掲示板” へ戻る