nybörjarproblem med struct

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

nybörjarproblem med struct

Inlägg av tokfan »

tjenare!
jag vet inte om jag är trött å dum i huvve eller bara dum i huvve.
sitter och försöker få ordning på hur det här hänger ihop. Har tagit ett exempel rakt ur min skolbok men fattar inte själva grejjen och inte heller hur man
skriver ut svaret smidigt. Detta ska ju vara ett smidigt sätt för att kunna lagra in massa data och skriva ut allt i structen på en gång har jag förstått.
kan man senare anropa bara b1 och b2 och sedan få allt som ingår i dessa utskrivet? jag antar det men vet inte hur.

Välkommen att idiotförklara mig, säga att jag ska googla på det, att jag ska tänka lite själv, att jag är inne i fel forum och nåt annat om ni kommer på, bara nån kunde hjälpa till med att svara på själva frågan skulle jag bli jätteglad.

OBS!!! (Jag har googlat men hittade bara svårare exempel som jag fattade mindre av, jag har även läst sidorna i boken 1000ggr. Det står ingen fortsättning på just detta problem där).

Kod: Markera allt

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
	int i;
	struct bok
	{
		char titel[50], forfattare[50];
		int antal_sidor, pris;
		float vikt;
	} b1, b2;
	
	printf(" skriv in titel, forfattare, antal sidor, pris och vikt\n"
	scanf("%s %s %d %d %f", b1.titel, b1.forfattare, &b1.antal_sidor, &b1.pris, &b1.vikt);

	
	
	
getch();

return 0;

}
tjoflöjt!!
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

Exakt _vad_ är problemet?
Kompilerar det inte? Kraschar det? Eller beter det sig inte som väntat?

/johan
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

När jag har skrivit in värden till de olika variablerna vet jag inte vad nästa steg är?
hur använder jag de sen? jag klarar inte ens att skriva ut alla värdena i listan på skärmen igen.
har ganska dålig koll. Det måste väl finnas nåt sätt där jag bara skriver blablabla-b1 så skrivs alla värdena ut.
eller också bara få tag på dom ett och ett.

Vet inte hur jag ska förklara. typ hur jag använder en struct över huvud taget. :oops:
får inget grepp om det.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

Prova att lägga till följande rad efter scanf():

Kod: Markera allt

printf("%s %s %d %d %f\r\n", b1.titel, b1.forfattare, b1.antal_sidor, b1.pris, b1.vikt);
/johan
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

haha, va tokigt, jag är nog lite trött. den borde jag ha tagit. :doh:
men sen när man har tex massor av böcker b1, b2, b.......b2000.
kan man då bara välja ut en bok genom att välja nåt kortare komando, eller skriver man fortfarande printf("%s %d osv")?
Det börjar klarna lite för mig fast jag är inte helt 100 på själva fördelen. eller är den bara att man kan spara massa olika sorters variabler på samma ställe?

tack för hjälpen förrästen! :bravo:
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

det måste ju gå att loopa på nåt vis så att alla böcker skrivs efter varandra och sånna finesser?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

Man kan se structen som sett sätt att "klumpa" ihop data som hör ihop, i ditt fall en bok som alltid har en titel, en författare, ett visst antal sidor osv.

Du kan fortfarande referera till det enskilda "datat", t.ex. som du gör när du skriver "b1.Titel".

Men, du kan framförallt sen skapa funktioner som tar structen som parameter, då slipper du radda
upp alla parametrarna i varje anrop...det är sen också mycket enklare att lägga till en ny parameter, t.ex.
"Förlag".

Jämför t.ex.

void SparaBok( char* Titel, char* Forfattare, int Sidor, int Pris, float Vikt);

med

void SparaBok( struct bok *pbok );


/johan
Användarvisningsbild
swesysmgr
Inlägg: 14961
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: nybörjarproblem med struct

Inlägg av swesysmgr »

Enklast är väl om du lagrar alla dina böcker i ett fält eller annan lämplig datastruktur t.ex. struct bok bibliotek[10];

Då kan du for-loopa dig igenom alla böcker i biblioteket.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

min sista fråga då är: om jag vill damma ut all info om 2 böcker som jag har sparat på skärmen, hur gör jag då?
eller gör jag lika som förra gången fast 2 gånger då?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

tokfan skrev:det måste ju gå att loopa på nåt vis så att alla böcker skrivs efter varandra och sånna finesser?
Då vill du nog göra en array av structar, t.ex.

Kod: Markera allt

 struct bok mina_bocker[100]; // reservera plats för 100 böcker

 strcpy(mina_bocker[0].Titel, "Fittja Paradiso");
 strcpy(mina_bocker[0].Forfattare, "Janne Josefsson");
 ...
 strcpy(mina_bocker[99].Titel, "Mitt liv som Anka");
 strcpy(mina_bocker[99].Forfattare, "Kalle Anka");

 for( int i=0; i < 100; i++)
 {
   printf("Bok %d är skriven av %s", (i+1), mina_bocker[i].Forfattare);
 }

Eller kanske hellre en länkad lista, men det kanske är lite överkurs för tillfället, det kommer när du kommer lite längre fram i C.

/johan
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

kom på en till :D

vad står medlem_s för när medlem är själva ("just denna medlemmen")?

Kod: Markera allt

struct medlem_s
    {
	int nr;
	char namn[40 + 1];
	int telnr;
    } medlem;
vet att det är trögfrågor nu. Den är inte så viktig. jag har fått sån otroligt bra hjälp med det jag klurade på.
kör fast på skitsaker hela tiden, så tickar tiden iväg så man är rädd att bomma kursen till slut.

jag är riktig riktigt tacksam!! Det sjukaste av allt är att ingen har idiotförklarat mig. Det brukar ju alltid hagla sånt och påhopp kors å tvärs.
kanske kommer i morgon om man har tur, när besserwisser-uvarna har sovit ut.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

johano skrev:
tokfan skrev:det måste ju gå att loopa på nåt vis så att alla böcker skrivs efter varandra och sånna finesser?
Då vill du nog göra en array av structar, t.ex.

Kod: Markera allt

 struct bok mina_bocker[100]; // reservera plats för 100 böcker

 strcpy(mina_bocker[0].Titel, "Fittja Paradiso");
 strcpy(mina_bocker[0].Forfattare, "Janne Josefsson");
 ...
 strcpy(mina_bocker[99].Titel, "Mitt liv som Anka");
 strcpy(mina_bocker[99].Forfattare, "Kalle Anka");

 for( int i=0; i < 100; i++)
 {
   printf("Bok %d är skriven av %s", (i+1), mina_bocker[i].Forfattare);
 }

Eller kanske hellre en länkad lista, men det kanske är lite överkurs för tillfället, det kommer när du kommer lite längre fram i C.

/johan
Jädrar anamma!! Det var prick sånt där jag ville få lite koll på. även om jag var lost på det andra i början. Jag ska nog spara hela tråden som word-dokument å plocka fram när jag klurar.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

struct bok är motsvarande medlem_s i mitt exempel?
i sånna fall fattar jag poängen med det också
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

"medlem_s" är namnet på själva "structtypen" (datatypen), "medlem" är namnet på en instans av den.

Jämför med t.ex. "int" och "AntalSidor", där "int" är namnet på datatypen och "AntalSidor" instansen.

En vanlig konstruktion är att använda "typedef struct Medlem { ... }", då kan du enkelt
sen använda "Medlem" som en egen datatyp, precis som du gör med "int", "char" os.v.
och behöver inte skriva "struct medlem_s medlem1";
'
Såhär t.ex.:
Medlem medlem1, medlem2;

/johan
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

klockrent igen!!!

nu ska jag sova!

Tusen tack!!

hare gött!!
//Olle
Skriv svar