程序运作不了,求支援
程序运行不了,求支援
#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。祝你运行成功。
------解决方案--------------------
主要看到类型不匹配,如果能从文件中正确读取数据不会没有结果的。
如果文件打开失败,那么返回的文件指针是NULL,但是可以调用fclose将一个NULL文件指针关闭???我想这一句应该去掉。
#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文件指针关闭???我想这一句应该去掉。