|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- /*********Begin*********/
- int main()
- {
- struct Info
- {
- long long int xh;
- char name[100];
- int score;
- }info[2];
- for(int i=1;i<3;i++)
- {
- scanf("%lld%s%d",&info[i].xh,info[i].name,&info[i].score);
- }
-
- if(info[2].score>info[1].score)
- {
- printf("%lld ",info[2].xh);
- printf("%s ",info[2].name);
- printf("%d",info[2].score);
- }
- else
- {
- printf("%lld ",info[1].xh);
- printf("%s ",info[1].name);
- printf("%d",info[1].score);
- }
-
-
- return 0;
- }
复制代码
如上代码,当我输入14308100238 xiaowang 99 15408122584 xiaoli 100这两组结构体数据时,输出的成绩较大的一组100这一组的名字从xiaoli变成了xiaomi
这是为什么?请大佬指教
本帖最后由 jackz007 于 2021-1-11 20:13 编辑
这个结构数组
- struct Info
- {
- unsigned long long xh ;
- char name[100] ;
- unsigned int score ;
- } info[2] ;
复制代码
info 的有效下标是 0 和 1,不是 1 和 2,所以,代码中凡是出现 info[2] 的都属于下标索引越界
这个是我修改的代码,楼主可以测试一下,在 Windows 下编译、运行应该没有问题,如果是在 Linux 系统下,long long 型数据输入、输出的格式描述符还得改回 "%lld" 。
- #include<stdio.h>
- int main()
- {
- struct Info
- {
- unsigned long long xh ;
- char name[100] ;
- unsigned int score ;
- } info[2] ;
- int i ;
- for(i = 0 ; i < 2 ; i ++) scanf("%I64u%s%u" , & info[i] . xh , info[i] . name , & info[i] . score) ;
- if(info[1] . score > info[0] . score) {
- printf("%I64u " , info[1] . xh ) ;
- printf("%s " , info[1] . name) ;
- printf("%u" , info[1] . score) ;
- } else {
- printf("%I64u " , info[0] . xh) ;
- printf("%s " , info[0] . name) ;
- printf("%u" , info[0] . 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>
复制代码
|
|