C 为什么下面的代码只输出人事数据库中最老和最年轻的人中的一个,而不是两个?

C 为什么下面的代码只输出人事数据库中最老和最年轻的人中的一个,而不是两个?,c,C,给定一个结构数组中的人员数据库,下面的代码应该扫描最年长和最年轻的人,并同时输出。 但是,根据输入的顺序,它只输出最年轻的人或最年长的人 #include <stdio.h> typedef struct personal_matter_tag{ char name[10]; int age; }personal_matter_t; personal_matter_t personnel[3]; int main(){ int min,max,n;

给定一个结构数组中的人员数据库,下面的代码应该扫描最年长和最年轻的人,并同时输出。 但是,根据输入的顺序,它只输出最年轻的人或最年长的人

#include <stdio.h>

typedef struct personal_matter_tag{
    char name[10];
    int age;
}personal_matter_t;

personal_matter_t personnel[3];

int main(){
    int min,max,n;

    for(n=0;n<2;n++){
        printf("Person name:\n");
        scanf("%s",&personnel[n].name);
        printf("Person age:");
        scanf("%d",&personnel[n].age);
    }

    for (n = 0; n < 2; n++) {
      max = personnel[0].age;
      if (max < personnel[n].age) printf("%s is older\n", personnel[n].name);
    }

    for (n = 0; n < 2; n++) {
      min = personnel[0].age;
      if (min > personnel[n].age) printf("%s is younger\n", personnel[n].name);
    }
}
你能帮我找到导致输出丢失的错误吗

为什么它只显示一个孩子而不是两个孩子


你可能是说为什么只有2个孩子而不是3个,这是因为你的for条件是nNo,这不是for条件。检查ndid时,我遗漏了程序中的某些内容。对于n=0,缩进为yes;如果您根据缩进、行分隔和更有意义的变量命名稍微清理一下代码,您可能会自己想出解决方案。使用英文命名。@pqans:堆栈溢出的策略是,只有询问者可以编辑他/她的代码中使用的逻辑和命名。其他人可能只修复代码中的代码格式和注释。有关更多信息,请参见元数据。似乎并非所有的审查人员都熟悉这项政策;只有这样才能解释你的编辑被批准的原因。我愿意恢复原始命名。然而,逻辑并没有改变。不过这个问题已经结束了,所以希望这没有引起太多的迷惑。那么重新编排的问题文本呢?这个答案猜测了问题作者的意思。它没有回答这个问题。它添加了一些评论,以理智地善意使用scanf。然而,这有点超出了这个问题的范围。此外,答案中还有一个明显的错误,即当max/min满足一定条件时,建议更新max\u秩/min\u秩。它也不建议更新max/min。我怀疑答案在发布到这里之前是否经过检查。@pqans您完全正确,即使您也不必谈论声誉,因为不管它是什么。我编辑了我的答案,为了我的辩护,当我回答时,我的状态非常差,无法进入它,而且还将进行测试,试着用电话回复,你会明白的^^^谢谢你提醒我最新的编辑解决了我在以前的评论中对这个答案的抱怨,现在答案是正确的。非常感谢。请解释为什么这个答案被否决。哦,你也给出了一个答案,你的DV不是我写的,所以我只能假设一些原因:数组的一个条目没有使用,你用条目0初始化了最小值和最大值,所以用索引0而不是1开始两个循环是“差”的,考虑到只有两个孩子,做循环是没有用的,事实上,你也可以打印最小/最大年龄,但是OP想要打印相应的名字,而你的代码不允许打印它们。良好的连续性和愉快的编码
scanf("%s", &a[n].nume);
scanf("%s", a[n].nume);
scanf("%s", &a[n].nume[0]);
scanf("%9s", a[n].nume);
 int max_rank = 0;
 int min_rank = 0;

 for (n = 1; n<sizeof(a)/sizeof(*a); n++) {
   if (a[max_rank].anul < a[n].anul) 
     max_rank = n;
   if (a[min_rank].anul > a[n].anul)
     min_rank = n;
 }
 printf("%s is older\n", a[max_rank].nume);
 printf("%s is younger\n", a[min_rank].nume);
#include <stdio.h>

struct copii {
  char nume[10]; 
  int anul;
}a[3];

int main(){
  int n;

  for(n=0; n < sizeof(a)/sizeof(*a); n++){
    printf("Kid's name:\n");
    if (scanf("%9s", a[n].nume) != 1) {
      puts("EOF, abort");
      return -1;
    }
    printf("Kid's year:");
    if ((scanf("%d",&a[n].anul) != 1) || (a[n].anul < 0)) {
      puts("invalid age, abort");
      return -1;
    }
  }

  int max_rank = 0;
  int min_rank = 0;

  for (n = 1; n<sizeof(a)/sizeof(*a); n++) {
    if (a[max_rank].anul < a[n].anul) 
      max_rank = n;
    if (a[min_rank].anul > a[n].anul)
      min_rank = n;
  }

  printf("%s is older (%d)\n", a[max_rank].nume, a[max_rank].anul);
  printf("%s is younger (%d)\n", a[min_rank].nume, a[min_rank].anul);  

  return 0;
}
/tmp % gcc -Wall c.c
/tmp % ./a.out
Kid's name:
k1
Kid's year:50
Kid's name:
k2
Kid's year:10
Kid's name:
k3
Kid's year:12
k1 is older (50)
k2 is younger (10)
/tmp % 
#include <stdio.h>

struct copii{
    char nume[10]; 
    int anul;
}a[3];

int main(){
    int min,max,n;
    for(n=0;n<2;n++){
        printf("Kid's name:\n");
        scanf("%s",&a[n].nume);
        printf("Kid's year:");
        scanf("%d",&a[n].anul);
    }

    max=a[0].anul;
    for(n=0;n<2;n++){
        if(max<a[n].anul) max = a[n].anul;
    }
    printf("The oldest kid is %d years old\n", max );

    min=a[0].anul;
    for(n=0;n<2;n++){
        if(min>a[n].anul) min = a[n].anul;
    }
    printf("The youngest kid is %d years old\n", min);
}