C言語の関数の戻り値がおかしい?
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int get_word(char *buf,int buf_size,FILE *fp)
{
int len;
int ch;
while((ch = getc(fp)) != EOF && !isalnum(ch));/*→「英数字のとき」このループは飛ばす。*/
if(ch == EOF){/*もし英数字以外が入力されていたらメインプログラムにEOFを返す。*/
return EOF;
}
len = 0;
do{
buf[len] = ch;
len++;
if(len >= buf_size){
fprintf(stderr,"word too long.\n");
exit(1);
}
}while((ch = getc(fp)) != EOF && isalnum(ch));
buf[len] = '\0';
return len;
}
int main(void)
{
char buf[256];
while(get_word(buf,256,stdin) != EOF){
printf("<<%s>>\n",buf);
}
return 0;
}
C言語ポインタ完全制覇という本のP67に載っていたプログラムをそのまま載せています。
get_word関数の中のif文で、EOFを返した時もループwhile(get_word(buf,256,stdin)により再入力するようなプログラムになっています。でも、「!=EOF」と記述されているのだから、EOFが返ったら終了だと思うのですが…
なぜ再入力し続けるプログラム(無限ループ)になってしまっているのでしょうか?
というか、私の環境で動作させたらおかしいだけじゃないでしょうか?
よろしくお願いします。
お礼
ありがとうございます! 説明文には Get property value. しか書いてないので多分なんとも言えないかと・・・ でも疑問は解決しました。 ありがとうございました!