www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atoi() funktioniert; atof() -->FEHLER


Autor: Jonny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen!

Über eine Tastatur gebe ich Werte an ein LCD aus.
Jeder Tastendruck (eigentlich der Wert) wird in den String
"zeichen_kette" abgespeichert. Nach drücken von '#', quasi ENTER,
habe ich also z.B folgenden String:

zeichen_kette[] = "123.254"

Da ich mit dem Wert von zeichen_kette noch weitere Rechenoperationen
durchführen muss, habe ich versucht den String mit atof() umzuwandeln.

float komma_zahl;
komma_zahl = atof(zeichen_kette);

Folgende Fehlermeldung habe ich erhalten: "Undefined external "atof"
referred in xxx.c [pfadangabe wo sich xxx.c befindet]"

Als Test habe ich dann anstatt atof() atoi() verwendet. Das hat
funktioniert. Für obigen Beispielstring war das Ergebnis: "123"!

Aufgrund der Genauigkeitsanforderung brauche ich aber die
Nachkommastellen.

Warum funktioniert atoi(), aber atof() nicht?
Kann mir da bitte jemand weiterhelfen!?
Schöne Grüße
Jonny

Autor: Berthold Benning (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
wenn atof() nicht zu finden ist dann siehe Anhang.
MfG.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob bei Jonny atof() "funktioniert" oder nicht, ist aus der Schilderung
so erstmal nicht zu entnehmen. Offensichtlich ist dem Compiler an der
Stelle keine Deklaration von atof() bekannt - also ist die
entsprechende Headerdatei nicht eingebunden.

Üblicherweise müssen math.h und stdlib.h eingebunden werden, damit
atof() deklariert ist; für atoi() genügt stdlib.h.

Der Hinweis von Berthold ist nur dann erforderlich, wenn atof() in
keiner der zum Compiler gehörenden Headerdateien deklariert ist (und
auch nicht in der Standardlibrary vorhanden ist), was aber ein sehr
eigenartiger C-Compiler sein müsste.

Autor: Jonny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank - jetzt funktioniert es!

Verstehen tue ich's zwar trotzdem nicht warum atoi funktioniert und
atof nicht, aber wie gesagt, vielen Dank!

Servus
Jonny

Autor: Jonny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rufus

Also stdlib.h ist als Header eingefügt. Auch habe ich math.h eingefügt,
hat aber nicht zum Erfolg geführt.

Auf deinen Hinweis hin habe ich einmal stdlib.h geöffnet.
Da finde ich folgende Zeilen:
.
.
.
__INTRINSIC MEMORY_ATTRIBUTE int  atoi(const char *);

__INTRINSIC MEMORY_ATTRIBUTE long atol(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double atof(const char *);
.
.
.

Also müsste das doch funktionieren, oder nicht?

Hier mal meine Variablen-Deklaration:
int z;
int button;
char zeichen_kette[17];
double komma_zahl;

Hier der Funktionsaufruf:
zeichen_kette[z] = button;



Kann mir bitte jemand weiter helfen!?

Vielen Dank für eure Hilfe!
Jonny

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.