mikele 发表于 2021-1-11 19:56:59

结构体数据

#include<stdio.h>
/*********Begin*********/
int main()
{       
        struct Info
        {
                long long int xh;
                char name;
                int score;
        }info;
        for(int i=1;i<3;i++)
        {
                scanf("%lld%s%d",&info.xh,info.name,&info.score);
        }
               
                if(info.score>info.score)
                {
                        printf("%lld ",info.xh);
                        printf("%s ",info.name);
                        printf("%d",info.score);
                }
                else
                {
                        printf("%lld ",info.xh);
                        printf("%s ",info.name);
                        printf("%d",info.score);
                }
               
       
return 0;
}



如上代码,当我输入14308100238 xiaowang 99 15408122584 xiaoli 100这两组结构体数据时,输出的成绩较大的一组100这一组的名字从xiaoli变成了xiaomi
这是为什么?请大佬指教{:10_254:}

jackz007 发表于 2021-1-11 20:11:16

本帖最后由 jackz007 于 2021-1-11 20:13 编辑

       这个结构数组
      struct Info
      {
                unsigned long long xh            ;
                char name                   ;
                unsigned int score               ;
      } info                              ;
      info 的有效下标是 0 和 1,不是 1 和 2,所以,代码中凡是出现 info 的都属于下标索引越界
      这个是我修改的代码,楼主可以测试一下,在 Windows 下编译、运行应该没有问题,如果是在 Linux 系统下,long long 型数据输入、输出的格式描述符还得改回 "%lld" 。
#include<stdio.h>

int main()
{      
      struct Info
      {
                unsigned long long xh            ;
                char name                   ;
                unsigned int score               ;
      } info                              ;
      int i                                    ;
      for(i = 0 ; i < 2 ; i ++) scanf("%I64u%s%u" , & info . xh , info . name , & info . score) ;
      if(info . score > info . score) {
                printf("%I64u " , info . xh ) ;
                printf("%s " , info . name)   ;
                printf("%u" , info . score)   ;
      } else {
                printf("%I64u " , info . xh);
                printf("%s " , info . name)   ;
                printf("%u" , info . score)   ;
      }
}
      编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
14308100238 xiaowang 99
15408122584 xiaoli 100
15408122584 xiaoli 100
D:\00.Excise\C>

mikele 发表于 2021-1-11 20:16:29

懂了,谢谢{:5_109:}
页: [1]
查看完整版本: 结构体数据