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