c - 通过结构数组按排序顺序显示年份

标签 c

我的问题是创建一个包含三个成员的结构,即日、月和年,并且我们必须通过键盘提供 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;

  }

最佳答案

两个主要问题是使用位域,以及不传递函数指针。

这里使用位域有一个小要点:无论是位域还是简单整数类型,结构体的大小都是 8。

但实际出现的问题是,在 scanf_sswap 中,您应该将指针传递给位域,并且编译器(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;
}

但我想说这仍然是有缺陷的。为什么只交换年份?我建议您也应该交换日期和月份:整个结构

关于c - 通过结构数组按排序顺序显示年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40428096/

相关文章:

c - 从结构访问双指针并在 execvp 中使用它

C. 函数指针回调。与原型(prototype)不兼容。

c - C 中的函数语法

c - 这个是casting吗,这个是什么and运算符

C词法分析器。使用开关分析和计算小数/非小数

c - 符号常量

c# - 如何将 C# 结构体转换为 C 结构体?

c - nginx 基于前缀的位置处理实现的效率如何?

c - 未知的冲突类型

c - 迭代迭代字符串数组(指针值似乎得到 "stuck")