質問したものではないですが
scanf("%48[a-zA-Z0-9 ]", buf);
の%48[a-zA-Z0-9 ]はどういう意味なのですか?