Gå til innhold

[Løst]Trenger hjelp med en struct- oppgave


Anbefalte innlegg

Skrevet

"LengthArray = (struct Length*)malloc(sizeof(struct Length) * LengthArraySize);" <-- denne jeg mangler altså. og denne "RetCm = (char*)malloc(sizeof(char) * 3);". Mulig å skrive det på en annen måte?

Videoannonse
Annonse
Skrevet

Errh. Man kan jo alltids refaktorisere koden sin, men om du har tid til å vente 15min så har jeg klart ett eksempel hvor man ikke trenger å bruke malloc og free.

Skrevet (endret)

Garanterer ikke at den er bug-fri, men tror det virker rimelig greit.

(Uten at jeg har testet noe særlig, men likevel...)

 

Den skal ihvertfall være svært enkel å forstå :)

 

 

 

#include <stdio.h>

struct Length
{
    int m;
    int cm;
    int mm;
};

//    Global variable. Creates three of the struct, as defined in the task.
struct Length LengthArray[2];

void add_length(struct Length *AddedLength)
{
    int i = 0;

    AddedLength->m = 0;
    AddedLength->cm = 0;
    AddedLength->mm = 0;    

    for (i = 0; i < 3; i++)
    {
        AddedLength->cm += LengthArray[i].cm;
        AddedLength->mm += LengthArray[i].mm;
        AddedLength->m += LengthArray[i].m;

        if (AddedLength->mm > 10)
        {
            int Rem = (AddedLength->mm % 10);
            AddedLength->cm += (AddedLength->mm / 10);
            AddedLength->mm = Rem;
        }

        if (AddedLength->cm > 100)
        {
            int Rem = (AddedLength->cm % 100);
            AddedLength->m += (AddedLength->cm / 100);
            AddedLength->cm = Rem;
        }
    }
}

int main()
{
    int i = 0;
    struct Length AddedLength;

    printf("%s", "Please enter the your values.\r\n");
    
    //    Fills the three variables with (user generated) content, as the task specifies.
    for (i = 0; i < 3; i++)
    {
        printf("%s%i%s", "Struct #", i, "\r\nM:  ");
        scanf("%i", &LengthArray[i].m);
        printf("%s", "CM: ");
        scanf("%i", &LengthArray[i].cm);
        printf("%s", "MM: ");
        scanf("%i", &LengthArray[i].mm);
    }

    add_length(&AddedLength);

    printf("%s%i%s%i%s%i%s", "Result: ", AddedLength.m, "m, ", AddedLength.cm, "cm, ", AddedLength.m, "mm\r\n");
    printf("%s%i%c%c%i%i", "Float: ", AddedLength.m, 0x2E, ((AddedLength.cm < 10) ? (0x30) : (0x00)), AddedLength.cm, AddedLength.mm);
 }

 

Endret av ze5400
Skrevet (endret)

Det var lettere ja. :)

 

Hva betyr alle disse: "AddedLength->m = 0;" Altså "->".

 

Denne må du forklare litt: "struct Length LengthArray[2];" Kopierer du den den første på en måte?

 

" printf("%s%i%c%c%i%i", "Float: ", AddedLength.m, 0x2E, ((AddedLength.cm < 10) ? (0x30) : (0x00)), AddedLength.cm, AddedLength.mm);"

 

Hvis det er noe jeg bør vite så skylder jeg på at jeg har sittet på pcen hele dagen nesten... :p

Endret av mx1000
Skrevet
Det var lettere ja. :)

 

Hva betyr alle disse: "AddedLength->m = 0;" Altså "->".

Vi benytter en peker. Derfor.

 

Denne må du forklare litt: "struct Length LengthArray[2];" Kopierer du den den første på en måte?

Oppretter en array-instans av strukturen, med tre plasser inni. 0,1 og 2.

 

 

 

" printf("%s%i%c%c%i%i", "Float: ", AddedLength.m, 0x2E, ((AddedLength.cm < 10) ? (0x30) : (0x00)), AddedLength.cm, AddedLength.mm);"

Hexadesimalske koder for forskjellige ascii-tegn. 0x2E = ".", 0x30 = "0", 0x00 = NUL.

 

Hvis det er noe jeg bør vite så skylder jeg på at jeg har sittet på pcen hele dagen nesten... :p

Skrevet

Okey, siste spørsmål (tror jeg):

"printf("%s%i%c%c%i%i", "Float: ", AddedLength.m, ".", ((AddedLength.cm < 10) ? ("0") : ("")), AddedLength.cm, AddedLength.mm);"

 

Hvorfor greier den ikke dette? Setter inn "xu" istedenfor "."

Skrevet

Fordi vi har angitt at vi skal passe som 'char'.

Det er faktisk mye lurere å gjøre slik, istedenfor med char, som jeg gjorde, for min metode setter inn ett whitespace når det ikke skal noe, slik at det ikke er så sweet.

 

Uansett, nå har jeg oppdatert posten min lengre oppe på denne siden med en hvor litt bugs er fikset, b.la. den du nevner.

 

Håper du har fått svar på alt du lurte på :)

Skrevet (endret)

Og problemet var at det var glemt en "m" slik at det ble "m" istendenfor "mm", i den nest siste setningen.

printf("\n%s%i%s%i%s%i%s", "Result: ", AddedLength.m, "m, ", AddedLength.cm, "cm, ", AddedLength.mm, "mm\r\n");

 

Da anser jeg denne oppgaven som løst. Bare skrive en kort rapport og levere.

 

 

Takk for all hjelp her! :D

Endret av mx1000

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...