Bruno Mars Skrevet 22. januar 2010 Forfatter Del 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? Lenke til kommentar
ze5400 Skrevet 22. januar 2010 Del 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. Lenke til kommentar
Bruno Mars Skrevet 22. januar 2010 Forfatter Del Skrevet 22. januar 2010 Okey, I'l hold. Lenke til kommentar
ze5400 Skrevet 22. januar 2010 Del 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 Lenke til kommentar
Bruno Mars Skrevet 22. januar 2010 Forfatter Del 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 Lenke til kommentar
ze5400 Skrevet 22. januar 2010 Del 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... Lenke til kommentar
Bruno Mars Skrevet 22. januar 2010 Forfatter Del 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 "." Lenke til kommentar
ze5400 Skrevet 22. januar 2010 Del 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å Lenke til kommentar
Bruno Mars Skrevet 22. januar 2010 Forfatter Del 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 Lenke til kommentar
Bruno Mars Skrevet 22. januar 2010 Forfatter Del 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 Lenke til kommentar
ze5400 Skrevet 22. januar 2010 Del Skrevet 22. januar 2010 (endret) EDIT: Ok. Bra at ting ordnet seg EDIT2: Bare hyggelig Endret 22. januar 2010 av ze5400 Lenke til kommentar
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å