Bruno Mars Skrevet 22. januar 2010 Forfatter Skrevet 22. januar 2010 "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?
ze5400 Skrevet 22. januar 2010 Skrevet 22. januar 2010 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.
ze5400 Skrevet 22. januar 2010 Skrevet 22. januar 2010 (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 22. januar 2010 av ze5400
Bruno Mars Skrevet 22. januar 2010 Forfatter Skrevet 22. januar 2010 (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... Endret 22. januar 2010 av mx1000
ze5400 Skrevet 22. januar 2010 Skrevet 22. januar 2010 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...
Bruno Mars Skrevet 22. januar 2010 Forfatter Skrevet 22. januar 2010 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 "."
ze5400 Skrevet 22. januar 2010 Skrevet 22. januar 2010 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å
Bruno Mars Skrevet 22. januar 2010 Forfatter Skrevet 22. januar 2010 Den burde jeg ha sett. Men tror det er noen feil her... Hvis jeg taster inn "1" på alle meterene, "10" på cm og "55" på mm, så får jeg: 3m, 46cm, 3mm = 3,465
Bruno Mars Skrevet 22. januar 2010 Forfatter Skrevet 22. januar 2010 (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! Endret 22. januar 2010 av mx1000
ze5400 Skrevet 22. januar 2010 Skrevet 22. januar 2010 (endret) EDIT: Ok. Bra at ting ordnet seg EDIT2: Bare hyggelig Endret 22. januar 2010 av ze5400
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå