Jag vill skriva en del av programmet i en separat c-fil. Hur skulle man kunna göra detta?
Ursäkta den röriga koden nedan men har i alla fall fetstilat den kod som ska placeras i en annan c-fil.
Undrar alltså hur man skulle kunna skriva den separata c filen samt hur man skulle kompilera allt till ett program om man sitter med en terminal.
Ursäkta den röriga koden nedan men har i alla fall fetstilat den kod som ska placeras i en annan c-fil.
Undrar alltså hur man skulle kunna skriva den separata c filen samt hur man skulle kompilera allt till ett program om man sitter med en terminal.
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;
}
/* 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 *file1, *file2;
file1 = fopen("labb4.txt", "r");
if (file1 == NULL){
file1 = fopen("labb4.txt", "w");
}
else
{
while (!feof(file1)){
for (i = 0; i < 10; i++){
fscanf(file1, "%s %s %s %s", f[i].namn, f[i].marke, f[i].fordonstyp , f[i]. registeringsnummer); }
fread(&f, sizeof(f),1, file1);}
}
fclose(file1);
/* 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 */
file2 = fopen("labb4.txt", "w+");
char buf[1024];
int needle = 0;
memset(buf,0,1024);
for (i = 0; i < 10; ++i) {
if(f[i].namn[0] != '\0' || f[i].marke [0] != '\0' || f[i].fordonstyp[0] != '\0' || f[i].registeringsnummer[0] != '\0') {
needle = needle + sprintf(buf + needle,"%s %s %s %s\n", f[i].namn, f[i].marke, f[i].fordonstyp, f[i].registeringsnummer);
}
}
fwrite(buf, strlen(buf), 1, file2);
fclose(file2);
return 0;
}
__________________
Senast redigerad av Ranndall 2018-09-15 kl. 15:38.
Senast redigerad av Ranndall 2018-09-15 kl. 15:38.


