结构问题
#include"stdlib.h"#include"stdio.h"
struct stud_type
{
char name;
long num;
int age;
char sex;
float score;
};
main()
{
void list(struct stud_type *pt);
struct stud_type student,*p;
int i;
char numstr;
for(i=0,p=student;p<student+3;p++,i++)
{
printf("\nenter all data of student[%d]:\n",i);
gets(p->name);
gets(numstr);p->num=atol(numstr);
gets(numstr);p->age=atoi(numstr);
p->sex=getchar();getchar();
gets(numstr);p->score=atof(numstr);
}
printf("\nname\t num agesexscore\n");
for(p=student;p<student+3;p++)
list(p);
}
void list(struct stud_type *pt)
{
printf("%-7s %6d %6d %3c %f\n",pt->name,pt->num,pt->age,pt->sex,pt->score);
}
我想问的是为什么,上面的打印性别,跟分数那里都不能正常显示呢?问题出在哪里? 怎么不正常了?? 性别那里不是显示 M 这些,是一个符号,然后分数那里,显示很长一段数字,但不是我所输入的数 测试下很正常.... 我的是这样显示 哈哈,终于被我发现了,这位帅哥在输入时,少输了年龄,程式上没有进行检查,所以出现楼主所说的情况.... 今天再试过这个程序,输入年龄了,还是一个样,是错误显示的,NUM这里改小了就可以显示,最奇怪的是我在VC++里运行就可以正常显示,到底为什么TC上运行是错误的呢?情况还是和我发的图差不多。 TC是基于16Bit平台的,VC(似乎是从3.0?)开始就是基于32Bit平台的.
所以VC中的int类型和long类型一样,都是占四个字节(32位),数值范围是–2,147,483,648 到2,147,483,647
但是,在16位的TC下,int类型是两位的,数值范围是-32768--32767 .
当int类型数据大于32767的时候,即溢出为负数,这时又将一个int赋值给L(L为long),有一个隐式类型提升,负数为在高位补1,依然为负数,所以最后应该会输出一个负数的错误值.
页:
[1]