atoi() funktioniert; atof() -->FEHLER

Gast #120708
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
Gast #120710
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.
Gast #120711
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
Gast #120712
@ 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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.