BromsMedlem sedan sep. 2002188 inlägg Hej. sitter å knåpar med en skoluppgift.. ska skapa ett filmarkiv. I arkivet finns ett antal band innehållandes ett antal filmer var. Det handlar alltså om heminspelare filmer med flera olika filmer på varje kassett. Programmet skall såklart struktureras upp bättre, med funktioner för varje del, men för tillfället tänkte jag mest försöka få en enkel arkivhantering att fungera.
Till problemet.. Jag skapar först en array med band, i denna tänkte jag skapa banden, och i varje band ha en array med filmer.. jag tänkte fylla arrayen med skräp först, för att sedan skriva ut det som inte är == skräpinfon. Har dock problem när jag skall skapa själva filmarrayen. det är raden
bandArkiv[count].filmer=tempfilm;
som krånglar, med felinformationen:
foo.c incompatible types in assignment of `film' to `film[10]'
Jag förstår varför det blir fel, men kommer inte alls på hur jag kommer förbi detta.
Koden är:
#include <stdio.h>
#include <stdlib.h>
#include "foofunc.c"
#define MAX 20
#define FILM_LIMIT 10
//Structen för en film
typedef struct {
int bandID;
char titel[30];
int filmLength;
int startPos;
char genre[30];
char regissor[40];
}film;
//Structen för ett band
typedef struct {
int bandID;
int bandLength;
int bandSpaceLeft;
film filmer[FILM_LIMIT];
}band;
int main(int argc, char *argv[]){
printf("V\x84lkommen till Arne.film\n");
printf("------------------------\n\n");
printf("G\x94r ditt val i menyn som f\x94ljer!\n\n");
//Vi skapar ett arkiv av [MAX] antal filmer.
band bandArkiv[MAX];
band tempband;
tempband.bandID=-9999; //eller NULL?
tempband.bandLength=-9999;
tempband.bandSpaceLeft=-9999;
//Skapar slask-informationen
film tempfilm;
tempfilm.bandID=-9999;
tempfilm.filmLength=-9999;
tempfilm.genre[0]='Ö';
tempfilm.genre[1]='Ö';
tempfilm.genre[2]='Ö';
tempfilm.regissor[0]='Ö';
tempfilm.regissor[1]='Ö';
tempfilm.regissor[2]='Ö';
tempfilm.startPos=-9999;
tempfilm.titel[0]='Ö';
tempfilm.titel[1]='Ö';
tempfilm.titel[2]='Ö';
//Fyller film-arrayen tempband.filmer med slask-info.
for(int count=0; count<FILM_LIMIT; count++){
bandArkiv[count].filmer=tempfilm; // <-- FELET!!!!!
printf("count: %d, bandID: %d.\n",count,tempband.filmer[count].bandID);
}
//Antalet band i arkivet, från start 0st band.
int antalBand=10;
int val=meny();
switch(val){
case 1 :
int bandid;
int speltid;
//<--sätter defaultvärden - a.k.a slask-info
bandid=-9999;
speltid=-9999;
//----------------------------------------->
printf("Ange ett band-ID: ");
scanf("%d",&bandid);
printf("Ange speltid f\x94r bandet: ");
scanf("%d",&speltid);
//addBand(bandid,speltid);
band bandet;
bandet.bandID=bandid;
bandet.bandLength=bandet.bandSpaceLeft=speltid;
bandArkiv[antalBand]=bandet;
antalBand++;
bandArkiv[3].bandID=4;
bandArkiv[6].bandID=7;
bandArkiv[3].bandLength=44;
bandArkiv[6].bandLength=77;
for(int i=0; i<MAX; i++){
printf("Filmerna, id: %d, speltid: %d.\n", bandArkiv[i].bandID,bandArkiv[i].bandLength);
}
break;
default :
break;
}
printf("\n");
system("PAUSE");
return 0;
}
//Startmenyn
int meny(){
int val;
printf("1. L\x84gg till kassett\n");
printf("2. Ta bort kassett\n");
printf("3. L\x84gg till film\n");
printf("4. Ta bort film\n");
printf("5. S\x94k kassett\n");
printf("6. S\x94k film\n");
printf("7. Avsluta\n\n");
printf("Vad vill du g\x94ra? ");
scanf("%d",&val);
return val;
}
Är det inte
film[] filmer
istället för
film filmer[] ??
BromsMedlem sedan sep. 2002188 inlägg Det ska väl inte spela någon roll, man kan väl använda båda 2.. eftersom man ibland kanske vill skapa flera olika stora arrayer av typen film, och ibland flera lika stora, ex:
film[10] film1, film2;
film film1[10], film2[15];
När jag deklarar band-arrayen gör jag det ju genom:
band bandArkiv[MAX];
, vilket fungerar finfint.
BromsMedlem sedan sep. 2002188 inlägg By the way, jag löste det..
på raden
bandArkiv[count].filmer[a]=tempfilm;
lade jag till [a] där a är en räknare i en tillagd for-loop, det är som sagt en array vi talar om, och jag glömde av att det är en array I en array.. *pusta*
PeWMedlem sedan juni 200010 432 inlägg Hmm.. du kan inte kopiera ett element till en hel array genom '='. Raderna:
typedef struct {
int bandID;
int bandLength;
int bandSpaceLeft;
film filmer[FILM_LIMIT];
}band;
säger ju att 'filmer' är en array av film, men tempfilm är bara film och inget annat.
PeWMedlem sedan juni 200010 432 inlägg Ah, du löste det och jag uppdaterade inte.. :e
BromsMedlem sedan sep. 2002188 inlägg hehe tack så mkt iaf PeW.. =) *kjamiz* En annan fråga bara.. det jag och Nickemannen pratade om där uppe i tråden.. om hur en film kan deklareras.. är det inte som jag antar?
PhorpherMedlem sedan feb. 20002 300 inlägg film filmer[]; deklarerar en array i C.
I t.ex. Java så kan man, som Nickemannen föreslår, använda antingen:
film[] filmer; eller
film filmer[];
BromsMedlem sedan sep. 2002188 inlägg En annan grej.. när jag kompilerar min kod till programmet, så ska den fylla alla videoband med kassetter med infon -9999 på alla int'ar.. men när jag sedan skriver ut dem blir det såhär:
id: 0, längd: 0.
id: 1, längd: 2292556.
id: 2, längd: 3997696.
id: 3, längd: 2089884671.
id: 4, längd: 2359672.
id: 5, längd: 0.
id: 6, längd: 3998072.
id: 7, längd: 66.
id: 8, längd: 3998072.
id: 9, längd: 16384.
Varför blir det sådär? De vill inte anta mina värden :(
#include <stdio.h>
#include <stdlib.h>
#define MAX 12
#define FILM_LIMIT 10
//Structen för en film
typedef struct {
int bandID;
char titel[30];
int filmLength;
int startPos;
int slutPos;
char genre[30];
char regissor[40];
}film;
//Structen för ett band
typedef struct {
int bandID;
int bandLength;
int bandSpaceLeft;
film filmer[FILM_LIMIT];
}band;
//Inkluderar funktions-filen först nu eftersom att jag först
//behöver ha skapat mina structer, som används i funktionerna.
#include "I_funk.c"
//Även bandArkiv[MAX] skapas direkt, utanför main, då den även
//används i fler delar än bara main.
band bandArkiv[MAX];
int main(int argc, char *argv[]){
printf("V\x84lkommen till Arne.film\n");
printf("------------------------\n\n");
printf("G\x94r ditt val i menyn som f\x94ljer!\n\n");
//Fixar i ordning variabler och annat.
if (!startFix()==true) exit(99);
//Antalet band i arkivet, från start 0st band.
int antalBand=10;
int val=meny();
switch(val){
case 1 :
int bandid;
int speltid;
//<--sätter defaultvärden - a.k.a slask-info
bandid=-9999;
speltid=-9999;
//----------------------------------------->
printf("Ange ett band-ID: ");
scanf("%d",&bandid);
printf("Ange speltid f\x94r bandet: ");
scanf("%d",&speltid);
//OM addBand går igenom med true som resultat
//så kommer antalBand att ökas med 1.
if (addBand(bandid, speltid, antalBand)==true) antalBand++;
else exit(99);
break;
case 2 :
int hej;
break;
}
printf("\n");
system("PAUSE");
return 0;
}
//Startmenyn
/*public static*/ int meny(){
int val;
printf("1. L\x84gg till kassett\n");
printf("2. Ta bort kassett\n");
printf("3. L\x84gg till film\n");
printf("4. Ta bort film\n");
printf("5. S\x94k kassett\n");
printf("6. S\x94k film\n");
printf("7. Avsluta\n\n");
printf("Vad vill du g\x94ra? ");
scanf("%d",&val);
return val;
}
bool addBand(int id, int tid, int fack){
band bandet;
bandet.bandID=id;
bandet.bandLength=bandet.bandSpaceLeft=tid;
bandArkiv[fack]=bandet;
return true;
}
bool startFix(){
band tempband;
tempband.bandID=-9999; //eller NULL?
tempband.bandLength=-9999;
tempband.bandSpaceLeft=-9999;
//Skapar slask-informationen
film tempfilm;
tempfilm.bandID=-9999;
tempfilm.filmLength=-9999;
tempfilm.startPos=-9999;
tempfilm.slutPos=tempfilm.startPos+tempfilm.filmLength;
tempfilm.genre[0]='a';
tempfilm.genre[1]='a';
tempfilm.genre[2]='a';
tempfilm.regissor[0]='a';
tempfilm.regissor[1]='a';
tempfilm.regissor[2]='a';
tempfilm.titel[0]='a';
tempfilm.titel[1]='a';
tempfilm.titel[2]='a';
//Fyller film-arrayen tempband.filmer med slask-info.
for(int count=0; count<FILM_LIMIT; count++){
for (int i=0; i<FILM_LIMIT; i++){
bandArkiv[count].filmer[i]=tempfilm;
}
printf("id: %d, l\x84ngd: %d.\n",count,tempband.filmer[count].filmLength);
}
printf("\n");
}