2016-04-29 11 views
0

ich für ein abschließenden studierte, und Angst, die ich zu diesem Thema zu viel Zeit verbringen, so wollte ich etwas Eingang. Das wird eine lange Lektüre sein, also hoffe ich, dass jemand das sieht. Die folgende Frage ist in dem Buch „Beginning C, vom Anfänger bis zum Profi“:von Anweisungen Abweichende, Spaß und informativ Struktur Übung

„Definieren Sie einen Strukturtyp mit dem Namen Länge, die eine Länge in Meter, Fuß, und Zoll stellt Definieren Sie eine add() Funktion. das wird zwei Länge Argumente hinzufügen und die Summe als Typ Länge zurück. definieren Sie eine zweite Funktion, show(), die den Wert seiner Länge Argument angezeigt wird. schreiben Sie ein Programm, das die Länge Typ verwenden und die add() und show() Funktionen, um eine beliebige Anzahl von Längen in Yards, Fuß und Zoll , die über die Tastatur eingegeben werden und die Gesamtlänge ausgeben. "

Was ich wie folgt interpretiert:

#include "stdio.h" 
#include "stdlib.h" 
#include"string.h" 

struct length 
{ 
    float FT; 
    float YD; 
    float IN; 

}; 

struct length ReadIT(char sym[]) 
{ 
    struct length Convert; 
    float dummy; 
    printf("Enter %s\n",sym); 
    scanf("%f",&dummy); 
    Convert.FT = dummy; 
    Convert.YD = dummy/3; 
    Convert.IN = dummy*12; 
    return(Convert); 
}; 
struct length Add(struct length first, struct length second) 
{ 
    struct length total; 
    total.FT = first.FT+second.FT; 
    total.YD = first.YD + second.YD; 
    total.IN = first.IN + second.IN; 
    return total; 
}; 
void Show(struct length Convert) 
{ 
    printf("Conversions FT: %.2f\n",Convert.FT); 
    printf("Conversions YD: %.2f\n",Convert.YD); 
    printf("Conversions IN: %.2f\n",Convert.IN); 
} 
void ShowSum(struct length total) 
{ 
    printf("total FT: %.2f\n",total.FT); 
    printf("total YD: %.2f\n",total.YD); 
    printf("total IN: %.2f\n",total.IN); 
} 


int main(void) 
{ 

char cmd = 'n'; 
struct length L1,L2; 
do 
{ 

    L1 = ReadIT("Length 1"); 
    Show(L1); 
    L2 = ReadIT("Length 2"); 
    Show(L2); 
    Add(L1,L2); 
    ShowSum(Add(L1,L2));//adds up the two lengths , but how do I store them? 
    printf("Would you like to add more lengths? Type 'y' to continue");    

    scanf("%s",&cmd); 
    } 
    while(tolower(cmd)=='y'); 
    printf("The total of all lengths is : "); 

    return 0; 
} 

Auch, weil dies aus dem Buch kam: Ich fand heraus, dass ich sollte es wie folgt interpretieren:

#include <stdio.h> 
#include <ctype.h> 

#define INCHES_PER_FOOT 12 
#define FEET_PER_YARD 3 

struct Length 
{ 
    unsigned int yards; 
    unsigned int feet; 
    unsigned int inches; 
}; 

struct Length add(struct Length first, struct Length second); 
void show(struct Length length); 

int main(void) 
{ 
    char answer = 'n'; 
    struct Length length; 
    struct Length total = { 0,0,0}; 
    int i = 0; 
    do 
    { 
    printf("Enter a length in yards, feet, and inches: "); 
    scanf(" %d %d %d", &length.yards, &length.feet, &length.inches); 
    total = add(total,length); 
    printf("Do you want to enter another(y or n)?: "); 
    scanf(" %c", &answer); 
    fflush(stdin); 
    }while(tolower(answer) == 'y'); 
    printf("The total of all the lengths is: "); 
    show(total); 
    printf("\n"); 
    return 0; 
} 

struct Length add(struct Length first, struct Length second) 
{ 
    unsigned long inches = 0; 
    struct Length sum; 
    inches = first.inches + second.inches+ 
    INCHES_PER_FOOT*(first.feet+second.feet+FEET_PER_YARD* (first.yards+second.yards)); 
    sum.inches = inches%INCHES_PER_FOOT; 
    sum.feet = inches/INCHES_PER_FOOT; 
    sum.yards = sum.feet/FEET_PER_YARD; 
    sum.feet %= FEET_PER_YARD; 
    return sum; 
} 

void show(struct Length length) 
{ 
    printf("%d yards %d feet %d inches", length.yards,length.feet,length.inches);  
} 

Als ich sah, alle zwei eingegeben, und die Summe der einzelnen FT, YD, & IN getan unabhängig diese Antwort, mein erster Gedanke war: „ich hätte das getan“, aber es machte es klingen wie sie getrennt alle diese Addition der Längen getan wollte. Jetzt bin ich besessen davon, meine Version zu beenden, aber ich habe eine Wand getroffen. Kann mich jemand zum Laufen bringen?

+1

Welche Winden Sie getroffen haben? Persönlich würde ich die ganze Menge auf die niedrigste Einheit (Zoll) umrechnen, die Mathematik machen und dann die Ergebnisse für die Anzeige zurück in Yards und Fuß umrechnen. Es bedeutet, dass Sie zum Beispiel 3 Meter, 17 Fuß und 24 Zoll nicht haben können, aber ich würde das als einen Bonus betrachten! – Mike

+0

Die Wand schlug ich war ich nicht so denken kann, die Summe aus der ersten Schleife speichern um und es dann von der nächsten Schleife zum Gesamt hinzufügen um, nehmen Sie, dass der Gesamt speichert es als eine Variable, dann sind diese wiederholen immer und solange der Benutzer will. – MessatsuX

+0

'scanf ("% s", &cmd);' -> 'scanf ("% c", &cmd);' – BLUEPIXY

Antwort

0

Die Wand schlug ich war ich nicht so denken kann, die Summe aus der ersten Schleife zu speichern um und es dann von der nächsten Schleife zum Gesamt hinzufügen um, nehmen Sie, dass der Gesamt speichert es als eine Variable, dann wiederholen Sie diese immer und immer wieder so lange wie der Benutzer will.

Sie können es ganz ähnlich tun, wie es in dem Buch Lösung getan:

struct Length total = { 0, 0, 0 }, subtotal; 
… 
    ShowSum(subtotal = Add(L1, L2)); // adds up the two lengths and stores the sum 
    total = add(total, subtotal);