while( fgets(buf, 100, fp) ){
 ...
}
↓
char *result;
do{
 result = fgets(buf, 100, fp);
 ...
}while( result )

条件の中に関数を丸ごと書くのは、
初心者には理解しづらいし、悪い習慣だとは思うけど……。
便利なんだよなぁ。