结构体数据
#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: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> 懂了,谢谢{:5_109:}
页:
[1]