Originally Posted by
userxbw
text
Thanks userxbw! Your help is much appreciated. I implemented your code to my program. Thanks for introducing "strcmp". That's new to me and i will look more in to that.
However it still don't work quite right. The function do sort by car brand in alphabetical order. But the first posts will be empty (pictures below). I will try to solve this on my own but any input to why this is happening is appreciated.
I noticed that I solved the problem by changing
Code:
"if (strcmp(f.marke, f[j].marke) > 0)"
to
Code:
"if (strcmp(f.marke, f[j].marke) < 0)"
But then it sorted by car brand in descending order. And thats not what i want.
Before sorting by car brand:
After sorting by car brand:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
/* Data av typen fordon */
typedef struct fordon {
char namn[15]; /* name of the owner */
char marke[20]; /* car brand */
char fordonstyp[15];
char registeringsnummer[10];
} fordon;
fordon f[10];
/* Data av typen fordon */
typedef struct person {
char id[40];
int alder;
} person;
person p;
/* Funktion lägg till fordon */
bool add(fordon* f) {
fordon tmp;
printf("Enter name of owner: ");
scanf("%s", tmp.namn); /* name of the owner */
printf("Enter car brand: ");
scanf("%s", tmp.marke); /* car brand */
/*printf("fordonstyp: ");
scanf("%s", tmp.fordonstyp);
printf("registeringsnummer: ");
scanf("%s", tmp.registeringsnummer);*/
/* Läs in allt data och lägg i tmp */
*f = tmp;
return true; // Allt gick bra
}
/* Funktion ta bort fordon */
bool delete(fordon* f){
fordon tmp;
int i = 0;
memset(&tmp.namn[0], 0, sizeof(tmp.namn));
memset(&tmp.marke[0], 0, sizeof(tmp.marke));
memset(&tmp.fordonstyp[0], 0, sizeof(tmp.fordonstyp));
memset(&tmp.registeringsnummer[0], 0, sizeof(tmp.registeringsnummer));
*f = tmp;
return true;
}
/* Sort after car brand*/
int sortera(){
int i,j;
fordon temp;
for (int i = 0; i < 10; i++)
{
for (int j = i+1; j < 10; j++)
{
if (strcmp(f[i].marke, f[j].marke) > 0)
{
temp = f[i];
f[i] = f[j];
f[j] = temp;
}
}
}
}
int main() {
/* switch meny */
int val = 0, i = 0;
while(val != 6){
printf("\n1. Add a vehicle");
printf("\n2. Remove a vehicle");
printf("\n3. Sort by car brand");
printf("\n4. Print out iinformation about a veichle");
printf("\n5. Print out vehicle directory");
printf("\n6. End\n");
printf("Enter a choice (1-6) ");
scanf("%d", &val);
switch(val){
case 1:
i = 0;
while( f[i].namn[0] != '\0' && i < 10){
i++;}
printf("(%d)", i+1);
if(f[9].namn[0] != '\0'){
printf("\n Registret är fullt\n");
break;
}
else{
add(&f[i]);
break;}
break;
case 2:
i= 0;
printf("\nSkriv in platsen(1-10) på det fordon du vill ta bort: ");
scanf("%d", &i);
delete(&f[i-1]);
break;
case 3:
sortera();
break;
case 4:
i = 0;
printf("\nSkriv in platsen(1-10) på det fordon du vill skriva ut information om: ");
scanf("%d", &i);
if(i < 1 || i >10){
("\nFel! Välj någon av platserna 1-10.\n");}
else if (f[i-1].namn[0] == '\0'){
printf("\nPlatsen är tom.\n");}
else {
printf("%d.%s %s %s %s\n", i, f[i-1].namn, f[i-1].marke, f[i-1].fordonstyp, f[i-1].registeringsnummer);}
break;
case 5:
for(i=0; i<10; i++){
printf("%d.%s %s %s %s\n", i + 1, f[i].namn, f[i].marke, f[i].fordonstyp, f[i].registeringsnummer) ;}
break;
case 6:
break;
default:
printf("\nFel! Välj något av alternativen 1-6.\n");
}
}
return 0;
}