#include <stdio.h>
struct member {
char name[20];
int age;
char sex;
int height;
};
int main(void)
{
int i,j;
struct member input[5]={0,};
int tot, rank, max=0;
int max2[5]={0,};
float res;
for (i=0; i<5; i++)
{
scanf("%s ", input[i].name);
scanf("%d %c %d", &input[i].age, &input[i].sex, &input[i].height);
getchar();
}
scanf("%d", &rank);
max =input[0].height;
for(i=1;i<=5;i++) {
for(j=0;j<5;j++) {
if(max>=input[j].height)
max=max;
else
max=input[j].height;
}
max2[i]=max;
for(j=0;j<5;j++) {
if(max==input[j].height)
input[j].height*=(-1);
}
max=-1;
}
for (i=0; i<5; i++)
{
if(max2[rank]== input[i].height)
printf("%s %d %c %d\n",input[i].name, input[i].age, input[i].sex,input[i].height);
}
fflush(stdin);
getchar();
return 0;
}
上面打印的结果我的代码什么都没有...即使输入的高度变成负数.. 这个程序有什么问题? 输入和输入打印应该像示例图像一样....... 请帮忙!
答案 0 :(得分:2)
应修复第一个scanf
scanf("%s ", input[i].name);
在第二个scanf
中,input[i].sex
是char
类型,因此您必须使用"%c"
代替%s
scanf("%d %s %d", &input[i].age, &input[i].sex, &input[i].height);
应该是
scanf("%d %c %d", &input[i].age, &input[i].sex, &input[i].height);
答案 1 :(得分:2)
你有很多的问题:
1)您从scanf()
:
scanf("%s ", input[i].name); // You don't need a & for a string
scanf("%d %c %d", &input[i].age, &input[i].sex, &input[i].height); // you need %c for a
// character
2)你正在使用for(i=1;i<=5;i++)
来访问一个包含5个元素的数组,这样你就会溢出数组(它应该是0到4,而不是1到5)
3)这是一个挑剔但是:
if(max>=input[j].height)
max=max;
这完全没有意义。您不需要为自己设置变量,只需反转逻辑(<
)并仅执行else
情况。
4)您将所有input[x].height
设置为它们最初设置的值的负数:
input[j].height*=(-1);
然后检查是否与您在此处打印前存储在max2[]
中的原始值相同:
if(max2[rank]== input[i].height)
printf("%s %d %s %d\n",input[i].name, input[i].age, input[i].sex,input[i].height);
嗯,这永远不会发生,所以你永远不会打印任何东西
5)fflush(stdin);
在大多数系统上都不是一个定义明确的操作,可能导致未定义的行为,所以不要这样做。