2017-06-04 8 views
-2

Ich versuche, die Durchschnittstemperatur für 4 Tage, die höchsten und niedrigsten zu zeigen. Der Code funktioniert perfekt, um den Durchschnitt und den höchsten/niedrigsten Wert der 4 Tage zu zeigen. Das Problem besteht darin, zu zeigen, an welchem ​​Tag es aufgetreten ist.Wie erhalten Sie den Wert für Tage in diesem Code?

Ich weiß, dass ich Arrays nicht dafür verwenden müssen, dachte ich, es einfach war, wenn ich es benutzt. Also, hier ist der Code. Wie kann ich es verbessern, um den Tag des höchsten/niedrigsten Wertes vom Benutzer einzufügen?

int high[NUMS], low[NUMS]; 

int maximum = 40; 
int minimum = -40; 

int i, day; 

float total, average; 

printf("---=== IPC Temperature Analyzer ===---\n"); 

for (i = 0; i < NUMS; ++i) { 

    do{ 
     printf("Enter the high value for day %d: \n", i+1); 
     scanf("%d", &high[i]); 
     printf("Enter the low value for day %d: \n", i+1); 
     scanf("%d", &low[i]); 


     if ((high[i] > maximum) || (low[i] < minimum) || (high[i] < low[i])){ 
       printf ("Incorrect values, temperatures must be in the range -40 to 40, high must be greater than low.\n"); 
     } 

    } while((high[i] > maximum) || (low[i] < minimum) || (high[i] < low[i])); 

    if((high[0] < high[i])) 
     high[0] = high[i]; 

    if ((low[0] > low[i])) 
     low[0] = low[i]; 

    total = total + (high[i] + low[i]); 

} 

average = (total/(NUMS * 2)); 

printf("The average (mean) temperature was: %.2f\n", average); 
printf("The highest temperature was %d, on day %d\n", high[0], day); 
printf("The lowest temperature was %d, on day %d\n", low[0], day); 

return 0; 
+0

speichern Index '' min_i' und max_i' – BLUEPIXY

+0

Mit 'dayhi = i;' und 'daylo = i;', müssen Sie zwei Variablen, da sie nicht am selben Tag sein könnte. Sie sollten auf "0" initialisiert werden, da der Bereichstest während der ersten Iteration niemals wahr sein wird. Außerdem würde ich auch dedizierte Variablen für die Max- und Min-Temperatur verwenden und das Element [0] nicht überschreiben. –

Antwort

2

Der einfachste Weg, ohne Änderung ist sehr viel Code zwei Variablen deklarieren day anstelle eines:

int day_low = 0; 
int day_high = 0; 

Dann wird Ihr unten für diese if Bedingungen ändern:

if((high[0] < high[i])) { 
    high[0] = high[i]; 
    day_high = i; 
} 

if ((low[0] > low[i])) { 
    low[0] = low[i]; 
    day_low = i; 
} 

Und schließlich :

printf("The highest temperature was %d, on day %d\n", high[0], day_high); 
printf("The lowest temperature was %d, on day %d\n", low[0], day_low); 
+0

Hey Danke. Aber jetzt funktioniert es perfekt, wenn die höchsten oder niedrigsten Werte nicht am ersten Tag sind. Wenn Sie beispielsweise am Tag 1 einen hohen Wert eingeben, zeigt der Tag die Zufallszahlen an. –

+0

Ich aktualisiere meine Antwort, um das Problem von Tag 1 zu lösen. Initialisiere einfach auf 0 die "Tag" Variablen – Jesferman

0

Vielen Dank für die Hilfe. Ich musste zur Variable hinzufügen und initiiere als 0 wie erwähnt.

aber war immer noch falsch. Der erste Tag zeigte sich als "Tag 0". Um es zu beheben, füge ich +1 hinzu.

if((high[0] < high[i])){ 
     high[0] = high[i]; 
     highestDay = i + 1; 
    } 

    if ((low[0] > low[i])){ 
     low[0] = low[i]; 
     lowestDay = i + 1; 
    } 
Verwandte Themen