C 通过结构数组按排序顺序显示年份的步骤

C 通过结构数组按排序顺序显示年份的步骤,c,C,我的问题是建立一个包含三个成员的结构,即日、月和年,我们必须通过键盘提供10名员工加入的年份。提供的年份应按年份的递增顺序显示给用户 因此,我使用了结构数组,然后使用scanf()函数提供值,然后使用冒泡排序对提供的年份进行排序。但似乎我在scanf()中遇到了问题。我的代码中存在运行时错误。我的代码有什么错误。请帮忙 下面是我的代码 #include<stdio.h> void swap(int *, int *); int main() { int i, j; typedef

我的问题是建立一个包含三个成员的结构,即日、月和年,我们必须通过键盘提供10名员工加入的年份。提供的年份应按年份的递增顺序显示给用户

因此,我使用了结构数组,然后使用scanf()函数提供值,然后使用冒泡排序对提供的年份进行排序。但似乎我在scanf()中遇到了问题。我的代码中存在运行时错误。我的代码有什么错误。请帮忙

下面是我的代码

#include<stdio.h>
void swap(int *, int *);
int main()
{
int i, j;

typedef struct date
{
    char day : 5;

    char month : 4;

    int year : 12;

}D;

D arr[10];

printf("Enter year of joining of 10 employees\n");

for (i = 0; i < 10; i++)
    scanf_s("%d", arr[i].year);

for (i = 0; i < 10; i++)
{
    for (j = i + 1; j < 10; j++)
    {
        if (arr[i].year > arr[j].year)
            swap(arr[i].year, arr[j].year);

    }

}

printf("Value of employees joining year in sorted order is : \n");

for (i = 0; i < 10; i++)
    printf("%d", arr[i].year);

return 0;

}

void swap(int *x, int *y)
 {
  int temp;

  temp = *x;
  *x = *y;
  *y = temp;

  }
#包括
无效掉期(整数*,整数*);
int main()
{
int i,j;
类型定义结构日期
{
第二天:5天;
半个月:4;
国际年:12;
}D;
D arr[10];
printf(“输入10名员工的加入年份”);
对于(i=0;i<10;i++)
扫描时间(“%d”,arr[i].年);
对于(i=0;i<10;i++)
{
对于(j=i+1;j<10;j++)
{
如果(arr[i].年>arr[j].年)
掉期(arr[i].年,arr[j].年);
}
}
printf(“按排序顺序加入年度的员工价值为:\n”);
对于(i=0;i<10;i++)
printf(“%d”,arr[i].年);
返回0;
}
无效交换(int*x,int*y)
{
内部温度;
温度=*x;
*x=*y;
*y=温度;
}

两个主要问题是使用位字段,而不是向函数传递指针

这里使用位字段有一点很简单:无论是位字段还是简单整数类型,结构的大小都是8

但实际出现的问题是,在
scanf_s
swap
中,应该传递一个指向位字段的指针,而编译器(MSVC)不喜欢这样

因此,删除位字段规范,并在调用中添加运算符地址

#include<stdio.h>

typedef struct date
{
    char day;                                      // remove bitfield spcs
    char month;
    int year;
} D;

void swap(int *, int *);

int main(void)
    {
    int i, j;
    D arr[10];

    printf("Enter year of joining of 10 employees\n");
    for (i = 0; i < 10; i++)
        scanf_s("%d", &arr[i].year);               // add the & operator

    for (i = 0; i < 10; i++)
    {
        for (j = i + 1; j < 10; j++)
        {
            if (arr[i].year > arr[j].year)
                swap(&arr[i].year, &arr[j].year);  // add & operators
        }
    }

    printf("Value of employees joining year in sorted order is : \n");
    for (i = 0; i < 10; i++)
        printf("%d", arr[i].year);
    return 0;
}

void swap(int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
#包括
类型定义结构日期
{
char day;//删除位字段SPC
炭月;
国际年;
}D;
无效掉期(整数*,整数*);
内部主(空)
{
int i,j;
D arr[10];
printf(“输入10名员工的加入年份”);
对于(i=0;i<10;i++)
scanf_s(“%d”,&arr[i].year);//添加&operator
对于(i=0;i<10;i++)
{
对于(j=i+1;j<10;j++)
{
如果(arr[i].年>arr[j].年)
swap(&arr[i].year,&arr[j].year);//添加运算符(&P)
}
}
printf(“按排序顺序加入年度的员工价值为:\n”);
对于(i=0;i<10;i++)
printf(“%d”,arr[i].年);
返回0;
}
无效交换(int*x,int*y)
{
内部温度;
温度=*x;
*x=*y;
*y=温度;
}
但我想说这仍然是不足的。为什么只交换一年?我建议您也应该交换日期和月份:整个
struct

尝试
scanf_s(“%d”,arr[I]>year)
scanf()需要一个指针,所以写&arr[I].year。注意:不要使用scanf_s()和“朋友”。