august 发表于 2007-5-6 22:50:44

结构问题

#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);
}

我想问的是为什么,上面的打印性别,跟分数那里都不能正常显示呢?问题出在哪里?

Saiholmes 发表于 2007-5-6 23:08:20

怎么不正常了??

august 发表于 2007-5-6 23:23:23

性别那里不是显示 M 这些,是一个符号,然后分数那里,显示很长一段数字,但不是我所输入的数   

Saiholmes 发表于 2007-5-6 23:30:54

测试下很正常....

august 发表于 2007-5-6 23:37:39

我的是这样显示

Zelsazgh 发表于 2007-5-7 07:51:58

哈哈,终于被我发现了,这位帅哥在输入时,少输了年龄,程式上没有进行检查,所以出现楼主所说的情况....

august 发表于 2007-5-21 01:15:55

今天再试过这个程序,输入年龄了,还是一个样,是错误显示的,NUM这里改小了就可以显示,最奇怪的是我在VC++里运行就可以正常显示,到底为什么TC上运行是错误的呢?情况还是和我发的图差不多。

duzhi5368 发表于 2007-5-21 17:16:56

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]
查看完整版本: 结构问题