gpt4 book ai didi

c - 对结构数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:17 24 4
gpt4 key购买 nike

我读取了一个文本文件并将数据存储在 struct 数组中,然后尝试对其进行排序并打印未排序和已排序的数组。它可以读取数组文本并存储在数组中,但是排序函数不会在没有给出任何错误的情况下运行。有什么问题吗?我使用strcmp()函数来比较student[s]:

#include <stdio.h>

struct person { //struct person with 4 fields
char name[100];
char address[100];
char IDnumber[20];
int age;
};

int main (void) {
FILE *file = fopen ( "personout.txt", "r");
struct person student[10]; // declares an struct array to store data
int k = 0;
if (file != NULL) {
char line[300];
while ( k < 10 && fgets ( line, sizeof line, file ) != NULL ) {
if ( 4 == sscanf ( line, " %99[^,], %99[^,], %19[^,], %d",
student[k].name, student[k].address, student[k].IDnumber, &student[k].age))
{
printf ( "%s\n Un-sorted array");
printf ( "%s\n", student[k].name);
printf ( "%s\n", student[k].address);
printf ( "%s\n", student[k].IDnumber);
printf ( "%d\n", student[k].age);
k++;
}
}
fclose ( file );
}
sortarray();

// prints sorted array
printf ( "%s\n Sorted array");
for (int t=0;t<10;t++) {
printf ( "%s\n", student[t].name);
printf ( "%s\n", student[t].address);
printf ( "%s\n", student[t].IDnumber);
printf ( "%d\n", student[t].age);
t++;
}
}

void sortarray(){
// number of records a r=a first for loop
// inner for loop s=r+1
struct person temp,student[10];
int a=10;
for (int r=0;r<a-1;r++) {
for (int s=r+1;r<a;s++) {
if (strcmp(student[r].name, student[s].name) > 0) {
temp = student[r];
student[r] =student[s];
student[s] = temp;
}
}
}
}

最佳答案

除了您的两个 printf 调用的未定义行为之外,您还遇到了局部变量实际上是局部变量的问题。

main 函数中的student 数组与sortarray 函数中的student 数组不同。 sortarray 函数中的数组将未初始化,尝试对其进行排序将导致未定义的行为

解决方案是从main 函数传递一个指向数组第一个元素的指针,这样sortarray 函数就可以使用它。这需要三个改变:

  1. 添加 sortarray 函数的前向声明:

    void sortarray(struct person *);
  2. 调用传递第一个元素指针的函数:

    sortarray(student);  // As arrays decays to pointers, this is like passing &student[0]
  3. 去掉sortarray函数中student数组的定义。

关于c - 对结构数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com