nybörjarproblem med struct

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: nybörjarproblem med struct

Inlägg av sodjan »

> men sen när man har tex massor av böcker b1, b2, b.......b2000.

Du kan ju så klart inte *bara* lagra det i variabler i programmet så
som har visats här, men det är du väl med på, eller hur ?
Nästa gång du startar programmet får du på något sätt ladda alla böcker igen.

Är det bara något slags test eller ska det faktiskt bli något för att hålla
reda på böcker ? I så fall är nog Access, OpenBase eller liknande lämpligare.

Men det kanske bara är en programmeringsövning utan annan praktiskt
nytta än att visa lite grunder i C... :-)
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: nybörjarproblem med struct

Inlägg av pbgp »

@sodjan: det verkade vara fråga om någon sorts övning till någon sorts kurs

@tokfan: Du har ju helt rätt att det ingår att bli idiotförklarad på internetforum när man vill lära sig något nytt, så varsågod:

"Men jösses, vilka basic saker, du kanske ska lära dig nått som heter google annars kanske är BASIC du ska lära dig :roll:"

:wink:
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: nybörjarproblem med struct

Inlägg av jesse »

(Jag antar att du är på sidan 171 i boken "Vägen till C" :wink: I så fall kommer ju väldigt bra förklaringar i resten av det kapitlet om vad man kan göra med struct)

Det enklaste sättet att begripa struct (till en början) är att se dem som en samling variabler helt enkelt.

I exemplet hade du lika gärna kunnat skriva som nedan och programmet hade gjort exakt samma sak:

Kod: Markera allt

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

int main()
{
   int i;

 //  bok b1

      char b1_titel[50], b1_forfattare[50];
      int b1_antal_sidor,  b1_pris;
      float b1_vikt;

// bok b2

      char b2_titel[50], b2_forfattare[50];
      int b2_antal_sidor, b2_pris;
      float b2_vikt;
   
   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);
   printf("%s %s %d %d %f\r\n", b1_titel, b1_forfattare, b1_antal_sidor, b1_pris, b1_vikt);

   getch();

return 0;

}
Och så länge du kör med enstaka struct-variabler (t.ex. b1, b2) så fungerar de inte så mycket annorlunda än andra "vanliga" variabler, förutom bland annat då att det går att skicka en pekare till hela structen på en gång i en funktion (har ni börjat med funktioner än?) och att du får överblick över vilka variabler som hör ihop.

exempel på funktioner med struct:

Kod: Markera allt

main { ...

// inmatning av två böcker
    mata_in_bok(b1);
    mata_in_bok(b2);

// utskrift av två böcker
    skriv_ut_bok(b1);
    skriv_ut_bok(b2);

}

void mata_in_bok(struct bok *b) {
    printf(" skriv in titel, forfattare, antal sidor, pris och vikt\n");
    scanf("%s %s %d %d %f", b->titel, b->forfattare, &b->antal_sidor, &b->pris, &b->vikt);
}

void skriv_ut_bok(struct bok *b) {
    printf(" visar titel, forfattare, antal sidor, pris och vikt\n");
    printf("%s %s %d %d %f\r\n", b->titel, b->forfattare, b->antal_sidor, b->pris, b->vikt);
}
(med reservation för lite fel här och där)
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

coolt jesse!!
Jag har inte kommit till pekare än, men det är precis på g. Jag läste runt massa gånger i boken tidigare men greppade det inte.
Nu är det nog dags att ge sig in i den igen. när man pekar på lite känns det som jag förstår nyttan av det lite mera.
Det är vägen till C boken jag läser, grabbarna på bilderna på baksidan av boken ser så balla ut att jag blev peppad och vill bli som dom.

sodjan: Jag kör verkligen basic exempel. Första i boken. Det du snackade om tar jag nog tag i nån gång runt år 2036.

Och idiotförklaringen satt på sin plats!!

jag ska ta itu med alla tips jag har fått när jag har vilat programmeringshuvvet ett tag.

tack ska ni ha
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: nybörjarproblem med struct

Inlägg av jesse »

>Jag läste runt massa gånger i boken tidigare men greppade det inte.

Jag lärde mig själv att programmera i C för något år sedan med just den boken. Jag rekommenderar att du läser den från början till slut, för om du börjar på ett exempel i kapitel 7 så kommer du inte att fatta något om du inte läst kapitel 5. Så hoppa runt i boken är nog inte det allra bästa i det här fallet.
Användarvisningsbild
pbgp
Inlägg: 1450
Blev medlem: 11 november 2010, 09:09:22
Ort: Uppsala

Re: nybörjarproblem med struct

Inlägg av pbgp »

Sen är faktiskt K&R en bra andra bok att skaffa. (nästan som första bok skulle jag säga)

http://en.wikipedia.org/wiki/The_C_Programming_Language

(nu får vi se om det blir flamkrig)
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: nybörjarproblem med struct

Inlägg av johano »

Den är ovärderlig som referens, men jag skulle kanske inte rekommendera den som nybörjarbok...

/johan
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: nybörjarproblem med struct

Inlägg av jesse »

Den är inte lättläst, om man inte redan är programmerare.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

jag har försökt plöja boken från början. känns som tempot är lite högt för mig i kursen bara. Jag tänkte läsa den på halva tiden för att hinna med andra kurser också. Vi får kompendier där det viktigaste står med, fast jag brukar uggla runt lite i boken också när jag är lost.
Nu ställer jag en ny fråga som inte har med min första fråga att göra, om det är ok för alla här.

Jag ska läsa in olika tal i ett program. om man skriver in bokstäver någonstans har jag tänkt att det ska ge ett felmedelande?

tjoflöjt!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: nybörjarproblem med struct

Inlägg av sodjan »

> Jag ska läsa in...

Läsa in varifrån ?

> ...olika tal...

Vad är ett "tal" med specifikt ?

> i ett program. om man skriver in bokstäver...

Vad menar du med en "bokstav" ? Vilka tecken/hexkoder ?
Något speciellt intervall ?

> ...någonstans har jag tänkt att det ska ge ett felmedelande?

Var ska felmedelandet komma/hamna/visas ?
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

jag menade;
Jag har en funktion som ska behandla siffror.
Sen kanske det kommer nåt stolpskott som skriver groda istället för en vanlig siffra( int double, float osv. inte char alltså). Då ska jag på något vis skriva ett felmedelande för att jag tänkt att groda + 22 inte ska vara ok att skriva in för den som använda programmet.
det ska bara kunna använda > < + - * != osv.

när något skriver groda ska ett felmedelande visas ex du har angivit ett ord. programmet är endast till förs siffror.

Det är väldigt basic nivå. ni kanske tänker att min fråga är på högre nivå än den är. koden kan säkert skrivas med 3-4 ord antar jag.
inga hexadecimala, oktala eller binära tal.
tokfan
Inlägg: 694
Blev medlem: 10 juni 2010, 14:05:13

Re: nybörjarproblem med struct

Inlägg av tokfan »

alltså det spelar ingen roll vart det visas. det fixar jag själv.

int tal1, tal2;

printf("skriv två tal");

- apa
groda

scanf("%d %d" & tal1, &tal2);


visas på skärmen: fel inmatning försök igen.

först måste ju programmet fatta att apa å groda inte är en int.
det skulle räcka med att skriva ut medelandet ovan.

extra snyggt vore att skriva att just de inskrivna orden är fel

visas på skärmen: apa och groda är inte giltiga siffror.

då måste man ju göra om inten till en string på något vis.
(det är ju tänkt att lagra det i en int från början)

någon som förstår vart jag vill komma. jag kan knappt förklara själv eftersom jag inte vet hur man gör.
så förbaskat svårt att förklara. Det är nog lättast att bara titta på mitt exempel ovan och inte bli bortfintad av allt mitt dravel.
Muppis
Inlägg: 275
Blev medlem: 15 februari 2007, 10:26:28
Ort: Halmstad

Re: nybörjarproblem med struct

Inlägg av Muppis »

scanf returnerar antalet lästa element. I ditt fall så läser du in två element, om då inte scanf returnerar 2 så är något fel.
Return Value
On success, the function returns the number of items successfully read. This count can match the expected number of readings or fewer, even zero, if a matching failure happens.
In the case of an input failure before any data could be successfully read, EOF is returned.
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 »

tokfan skrev:jag har försökt plöja boken från början. känns som tempot är lite högt för mig i kursen bara. Jag tänkte läsa den på halva tiden för att hinna med andra kurser också. Vi får kompendier där det viktigaste står med, fast jag brukar uggla runt lite i boken också när jag är lost.
Den tid du "sparar" på att inte läsa lite i det relevanta kapitlet först förlorar du på felsökning av uppgifterna i nästa moment. Du behöver inte läsa varenda ord och antagligen täcker er kurs inte ens hela boken.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: nybörjarproblem med struct

Inlägg av sodjan »

> först måste ju programmet fatta att apa å groda inte är en int.

Om du läser in det som strängar så kan du nog testa om det
innehåller ett giltigt tal eller inte.

> då måste man ju göra om inten till en string på något vis.

itoa() eller liknande (integer to ascii).
Men det du nog vill göra är att göra en int av det du läste
in med t.ex atoi() eller liknande. D.v.s efter att du har verifierat
att strängen innehåller ett giltigt tal.

> Jag har en funktion som ska behandla siffror.

Jag tror att du menar tal eller "numeriska värden/variabler", inte siffror... :-)
"1" är en siffra men det är för den delen inget tal utan ett ASCII tecken.
1 däremot är ett tal. Ser du skillnaden ? :-)

Och "123" är tre siffror (ett, två och tre) medans 123 är ett tal (etthundratjugotre).
Det är en jäkla skillnad på det !
Skriv svar