程序运作不了,求支援

程序运行不了,求支援
#include<stdio.h>
#include<stdlib.h>
typedef unsigned long dword;
typedef unsigned short word;
typedef struct bmpstruct{
word leixing;
long size;
dword baoliu;
dword dizhi;
dword biSize;
long   biWidth;
long   biHeight;
word   biPlanes;
word   biBitCount;
dword biCompression;
dword biSizeImage;
long   biXPelsPerMeter;
long   biYPelsPerMeter;
dword biClrUsed;
dword biClrImportant;
long ww;
int ii;
}bmp;
bmp head;
int readbm(const char *bm);
int main()
{
char strname[]="c:\\1.bmp";
if(readbm(strname));
printf("标示符:%s\n\
   文件大小:%ld\n\
   保留部分:%s\n\
   起始地址:%s\n\
   影响区分块大小:%s\n\
   宽度:%ld\n\
   高度:%ld\n\
   彩色位的个数:%d\n\
   像素位数:%d\n\
   压缩方法:%d\n\
   原始大小:%d\n\
   水平方向分辨率:%ld\n\
   垂直方向分辨率:%ld\n\
   重要颜色数目:%ld\n\
biClrImportant:%ld\n\
未知:%ld\n\
未知:%ld\n",\
head.leixing,\
head.size,\
head.baoliu,\
head.dizhi,\
head.biSize,\
head.biWidth,\
head.biHeight,\
head.biPlanes,\
head.biBitCount,\
head.biCompression,\
head.biSizeImage,\
head.biXPelsPerMeter,\
head.biYPelsPerMeter,\
head.biClrUsed,\
head.biClrImportant,\
head.ww,\
head.ii);
}
int readbm(const char *bm)
{
FILE *fp;
if (NULL==(fp=fopen(bm,"rb")))
{
fclose(fp);
   return 0;
}
fread(&head,sizeof(head),1,fp);
fclose(fp);
return 1;
}

------解决方案--------------------
你程序里 “标示符” 对应的变量是 “head.leixing”,此变量为整形。而语句“printf("标示符:%s\n\...")中的“%s”要求输出的是字符串类型。把它改为“printf("标示符:%d\n\..."),就可以了,其他有%s的地方也要改为%d。祝你运行成功。
------解决方案--------------------

printf("标示符:%s\n\    //类型不匹配
   文件大小:%ld\n\
   保留部分:%s\n\    //类型不匹配
   起始地址:%s\n\    //类型不匹配
   影响区分块大小:%s\n\    //类型不匹配
   宽度:%ld\n\
   高度:%ld\n\
   彩色位的个数:%d\n\
   像素位数:%d\n\
   压缩方法:%d\n\
   原始大小:%d\n\
   水平方向分辨率:%ld\n\
   垂直方向分辨率:%ld\n\
   重要颜色数目:%ld\n\
biClrImportant:%ld\n\
未知:%ld\n\
未知:%ld\n",\
head.leixing,\
head.size,\
head.baoliu,\
head.dizhi,\
head.biSize,\
head.biWidth,\
head.biHeight,\
head.biPlanes,\
head.biBitCount,\
head.biCompression,\
head.biSizeImage,\
head.biXPelsPerMeter,\
head.biYPelsPerMeter,\
head.biClrUsed,\
head.biClrImportant,\
head.ww,\
head.ii);

主要看到类型不匹配,如果能从文件中正确读取数据不会没有结果的。

if (NULL==(fp=fopen(bm,"rb")))
{
fclose(fp);    //可以关闭为NULL的文件指针???
   return 0;
}

如果文件打开失败,那么返回的文件指针是NULL,但是可以调用fclose将一个NULL文件指针关闭???我想这一句应该去掉。