0

在此处输入图像描述

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

}

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

4

2 回答 2

2

第一个scanf应该是固定的

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

在第二个scanf中, theinput[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);
于 2013-05-24T14:35:55.473 回答
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);在大多数系统上不是一个定义明确的操作,并且可能导致未定义的行为,所以不要这样做。

于 2013-05-24T14:57:33.833 回答