I have a structure for every user and I'm trying to sort them by users Lastname
Full code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
struct phNum
{
char name[30];
char lastName[30];
int phone;
};
typedef struct phNum PhNum;
PhNum phList[5] = {};
void showData() {
for(int i = 0;i < 5;i ) {
if(strcmp(phList[i].name,"empty") == 0 && phList[i].phone == 0){
printf("%d : %s | %s | null\n", i 1,phList[i].name,phList[i].lastName);
}
else {
printf("%d : %s | %s | %d\n", i 1,phList[i].name,phList[i].lastName,phList[i].phone);
}
}
}
The array maximum is 5 items and the minimum is 0
I want to sort them ascending by their Lastname and if there are 4 items don't show the fifth one.
and I want to override my Array phList
and rewrite the sorted one
my showData
function is supposed to sort and print
I tried These answers but I didn't understand: How to sort an array of structs in C? and
How do I sort an array of structs in C by name, age and id?
I also tried to make a bubble sort algorithm but I was struggling to put my sorted data into my phList
Thanks For Help
CodePudding user response:
For starters this declaration
PhNum phList[5] = {};
is invalid in C. Opposite to C in C you may not specify empty braces.
You could define the array like for example
PhNum phList[5] = { 0 };
To sort the array you can use standard C function qsort
declared in header <stdlib.h>
.
You need yourself to track how many actually initialized elements in the array. You may not change the array size.
For example if the array contains n
initialized elements where n
is greater than 0
and less than or equal to 5
then you can write
int cmp( const void *a, const void *b )
{
const PhNum *p1 = a;
const PhNum *p2 = b;
return strcmp( p1->lastName, p2->lastName );
}
and in main you can write
qsort( phList, n, sizeof( *phList ), cmp );