使用Structure在五个成员的高度中打印第n个成员

时间:2013-05-24 14:33:30

标签: c arrays structure

enter image description here

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

}

上面打印的结果我的代码什么都没有...即使输入的高度变成负数.. 这个程序有什么问题? 输入和输入打印应该像示例图像一样....... 请帮忙!

2 个答案:

答案 0 :(得分:2)

应修复第一个scanf

scanf("%s ", input[i].name);

在第二个scanf中,input[i].sexchar类型,因此您必须使用"%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);在大多数系统上都不是一个定义明确的操作,可能导致未定义的行为,所以不要这样做。