Jag har ett program som frågar användaren efter information om fordon och dess ägare. Det finns plats för 10 "fordons" poster enligt följande kod:
Jag har börjat lite på en kod genom att kolla på andra exempel men den funkar inte riktigt i nuläget:
Någon som vet hur man kan lösa problemet? Poster hela den körbara koden här under spoiler:
Kod:
I programmet kan användaren själv mata in poster. Jag vill dock göra det möjligt för programmet att kolla om det finns en .txt fil med poster som den kan importera till "typedef struct fordon". typedef struct fordon { char namn[15]; char marke[20]; char fordonstyp[15]; char registeringsnummer[10]; } fordon; fordon f[10];
Jag har börjat lite på en kod genom att kolla på andra exempel men den funkar inte riktigt i nuläget:
Kod:
/*FILE *file = fopen("labb4.txt", "w"); fclose(file); if (file == NULL){ } else { while (!feof(file)) { //fscanf(file, "%d%s%lf", &f.namn, &f.marke, &f.fordonstyp, &f.registeringsnummer); fread(&f, sizeof(f),1, file); } } fclose(file);
Någon som vet hur man kan lösa problemet? Poster hela den körbara koden här under spoiler:
Kod:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> /* Data av typen fordon */ typedef struct fordon { char namn[15]; char marke[20]; char fordonstyp[15]; char registeringsnummer[10]; } fordon; fordon f[10]; /* Data av typen person */ typedef struct person { char id[40]; int alder; } person; person p; /* Funktion lägg till fordon */ bool add(fordon* f) { fordon tmp; printf("Skriv in namn: "); scanf("%s", tmp.namn); printf("Skriv in märke: "); scanf("%s", tmp.marke); printf("Skriv in fordonstyp: "); scanf("%s", tmp.fordonstyp); printf("Skriv in registeringsnummer: "); scanf("%s", tmp.registeringsnummer); *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; } /* Sortera efter märke*/ void 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 && f[j].marke[0] != '\0') { temp = f[i]; f[i] = f[j]; f[j] = temp; } } } } int main() { int val = 0, i = 0; /* Skriv in från fil */ /*FILE *file = fopen("labb4.txt", "w"); fclose(file); if (file == NULL){ } else { while (!feof(file)) { //fscanf(file, "%d%s%lf", &f.namn, &f.marke, &f.fordonstyp, &f.registeringsnummer); fread(&f, sizeof(f),1, file); } } fclose(file); */ /* switch meny */ while(val != 6){ printf("\n1. Lägg till fordon"); printf("\n2. Ta bort fordon"); printf("\n3. Sortera efter bilmärke"); printf("\n4. Skriv ut information om ett fordon"); printf("\n5. Skriv ut hela fordonregistret"); printf("\n6. Avsluta\n"); printf(" Skriv in ett val(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"); } } /* Skriv ut till fil */ //for (i = 0; i < 10; i++) { // fwrite(&f[i], sizeof (fordon), 1, file); //} //fclose(file); return 0; }
__________________
Senast redigerad av smellyproof 2017-11-29 kl. 15:39.
Senast redigerad av smellyproof 2017-11-29 kl. 15:39.