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已排序数组”)
?花点时间。