In C: Celsius in Fahrenheit?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Werte wie 9 oder 5 werden als Ganzzahlen (Integer) interpretiert. Wenn du zwei Ganzzahlen miteinander dividierst, erhältst du auch eine Ganzzahl als Ergebnis. Verwende für mindestens einen beider Werte ein anderes Literal.

Zum Beispiel:

9.0 / 5

Wenn du eine Division mit Ganzzahlen

Zusätzlich noch ein paar weitere Anmerkungen:

1) Makronamen würde ich, damit man sie stets vom üblichen Code auseinanderhalten kann, in Großbuchstaben schreiben. Es ist eine übliche Konvention.

#define CONVERT_CELSIUS_TO_FAHRENHEIT(celsius)((celsius * (9.0 / 5)) + 32)

2) Arbeite besser mit eindeutigen, aussagekräftigen Bezeichnern. Im obigen Snippet siehst du schon, dass ich hinsichtlich der Namen zwei Änderungen vorgenommen habe.

Andere Beispiele in deinem Code wären:

  • temperatures statt temp (temp ist üblicherweise die Abkürzung für temporary)
  • array_length statt string_length (die Funktion berechnet doch die Länge deines double-Arrays und nicht die eines Strings)

3) Deine Funktion string_length hat ein Problem. Angenommen, dein Array sieht so aus:

double temperatures[MAX_LENGTH] = { 1, 2, 0, 3, 4 };
printf("%d", string_length(temperatures));

Dann wäre die Ausgabe 2, nicht wie erwartet 5. Dabei ist 0 doch eine valide Gradangabe.

Ich würde auf die string_length vollkommen verzichten. Setze entweder überall das Makro MAX_LENGTH ein, wo du die Länge des Arrays wissen musst und reduziere den Wert auf die tatsächliche Länge (im obigen Beispiel also 5) oder lege eine extra Variable an, die die besetzte Länge kennt und stets mitgereicht wird.

void calculate_something(double[], size_t);

int main(void)
{
  size_t numberOfTemperatureValues = 5;
  double temperatures[MAX_LENGTH] = { 1, 2, 0, 3, 4 };
  calculate_something(temperatures, numberOfTemperatureValues);

  return 0;
}

void calculate_something(double[] temperatures, size_t numberOfTemperatureValues)
{
  // do something ...
}

Du könntest, um beide Angaben besser zusammenzuhalten, auch ein struct definieren.

#define MAX_LENGTH 5

struct temperatureDegrees {
  double values[MAX_LENGTH];
  size_t numberOfValues;
};

void calculate_something(struct temperatureDegrees);

int main(void)
{
  struct temperatureDegrees degrees = {
    { 1, 2, 0, 3, 4 },
    MAX_LENGTH
  };
  calculate_something(degrees);

  return 0;
}

void calculate_something(struct temperatureDegrees degrees)
{
  // do something ...
}

Auf die einzelnen Attribute des struct kannst du via Punktnotation zugreifen.

Beispiel:

size_t numberOfValues = degrees.numberOfValues;