Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对结构数组排序_C_Sorting - Fatal编程技术网

C 对结构数组排序

C 对结构数组排序,c,sorting,C,Sorting,我读取一个文本文件并将数据存储在struct数组中,然后尝试对其进行排序并打印未排序和排序的数组。它的工作原理是读取数组文本并存储在数组中,但排序函数在运行时不会给出任何错误。怎么了?我使用strcmp()函数比较student[s]: #include <stdio.h> struct person { //struct person with 4 fields char name[100]; char address[100]; char IDnumbe

我读取一个文本文件并将数据存储在
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;
            }
        }
    }
}
#包括
struct person{//struct person有4个字段
字符名[100];
字符地址[100];
字符ID号[20];
智力年龄;
};
内部主(空){
FILE*FILE=fopen(“personout.txt”、“r”);
struct person student[10];//声明用于存储数据的结构数组
int k=0;
如果(文件!=NULL){
字符行[300];
while(k<10&&fgets(行、行大小、文件)!=NULL){
如果(4==sscanf(行,“%99[^,]”、%99[^,]”、%19[^,]”、%d),
学生[k]。姓名,学生[k]。地址,学生[k]。ID号码,&学生[k]。年龄)
{
printf(“%s\n未排序数组”);
printf(“%s\n”,学生[k]。姓名);
printf(“%s\n”,学生[k]。地址);
printf(“%s\n”,学生[k].IDnumber);
printf(“%d\n”,学生[k]。年龄);
k++;
}
}
fclose(文件);
}
sortarray();
//打印排序数组
printf(“%s\n排序数组”);

对于(int t=0;t除了两个
printf
调用中未定义的行为外,局部变量实际上是局部变量,这是一个问题

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

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

  • 添加
    sortarray
    函数的前向声明:

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

    sortarray(student);  // As arrays decays to pointers, this is like passing &student[0]
    
  • sortarray
    函数中删除
    student
    数组的定义


  • 除了两个
    printf
    调用中未定义的行为外,局部变量实际上是局部变量,这也是一个问题

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

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

  • 添加
    sortarray
    函数的前向声明:

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

    sortarray(student);  // As arrays decays to pointers, this is like passing &student[0]
    
  • sortarray
    函数中删除
    student
    数组的定义


  • @gs Gunasekara函数正在排序的数组是什么?!
    printf(“%s\n未排序数组”)
    printf(“%s\n已排序数组”)
    ?花点时间。@gs Gunasekara函数正在排序的数组是什么?!
    printf(“%s\n未排序数组”)
    printf(“%s\n已排序数组”)
    ?花点时间。