# Erkennen ob eine Variable Zahl oder Buchstabe



## DiGn1TaS (9. August 2008)

Hallo, 
Folgende Ausgangssituation : 
Ich habe eine Datei , die z.b. folgendermaßen aussicht : 

Geschwindigkeitsfeld y = 0.1 
X-Werte           Geschwindigkeit
0                         1
.                          .
.                          .
.                          .
.                          .
Geschwindigkeitsfeld y = 0.2 
usw. 

Nun möchte ich sowohl die x-werte als auch die y-werte 
in eine Xx2-Matrix schreiben damit ich sie Verabreiten kann. 
Klappt super, wenn man den "Kopf" weglässt und  immer für jeden y-wert 
die Daten in eine eigene Datei kopiert. Bei knapp 100 Dateien a 14 y-werten 
etwas umständlich. 
Daher meine Frage : 
Wie kann ich mein C++-Prog dazu bringen, zu erkennen ob der gerade eingelesene 
wert nun vom typ Double oder Char ist ? 
Bisher habe ich herausgefunden, dass wenn ich z.b. sage , a ist char und ich speichere
eine zahl in a , dass dann a = 0 . 
Allerdings kann ich dann nicht wieder z.b. a = (double)a sagen, dann kommt Müll raus ...
Wie also vorgehen ?

MfG
Sven


----------



## sheel (9. August 2008)

"Bisher habe ich herausgefunden, dass wenn ich z.b. sage , a ist char und ich speichere eine zahl in a , dass dann a = 0"
Das wäre mir allerdings neu...
wenn du sowas machst, kann man eigentlich nicht garantieren, welcher wert dort drinnensteht, könnte irgendwas sein

die einfachste lösung zum unterscheiden wäre doch, Vor jedes double ein d und vor jeden char ein c zu schreiben oder so ähnlich
Weil bei einer formatierten Ausgabe zu unterscheiden ob ein paar Bytes jetzt eine Kommazahl oder Buchstaben darstellen sollen, kann schwierig werden...es gibt ja auch im ASCII Ziffern und Kommas


----------



## Ryu1991 (9. August 2008)

du kannst nicht raus finden, ob etwas ein char oder ein int ist, weil das im speicher das selbe ist, double ist doppelt so groß wie char, das wäre eine eventuelle Möglichkeit, aber du kannst an Hand der ASCII Tabelle raus finden ob etwas ein Buchstabe oder eine zahl ist, wenn der wert zwischen c.a. 40 und 70 liegt ist es nen Kleinbuchstabe, beispielsweise, schau dir einfach mal die ASCII Tabelle an.


----------



## devDevil (10. August 2008)

Wenn das wirklich stimmt, das der beim einlesen nen 0 da setzt, kannst du sie einfach wieder in den buffer schieben und neu einlesen.


----------



## Nord-Süd-Richtung (10. August 2008)

Vielleicht hab ich das überlesen, wenn nicht unter C++ gibt es die Funktionen 

```
isdigit(variable); // true wenn variable = ziffer, sonst false
isalpha(variable); // true wenn variable = buchstabe, sonst false
```
Vielleicht hilft dir das ja ein bisschen.


----------



## sheel (10. August 2008)

double ist doppelt so groß wie char
war double nicht irgendwann mal 8 Byte und char nur einer...


----------



## DrHastig (10. August 2008)

sheel hat gesagt.:


> double ist doppelt so groß wie char
> war double nicht irgendwann mal 8 Byte und char nur einer...



Laut IEEE 754 hat double 8 Byte.


----------



## sheel (11. August 2008)

ja mein ich ja, hab nur das zitat herum vergessen,

das war die aussage von ryu 1991 ein paar beiträge weiter oben


----------



## Ryu1991 (11. August 2008)

Auf unserem Wndows Xp x32 hat ein char ein int und die alle 32bit = 8byte. 
(zumindest habe ich es so gelernt)
Auf Vista 64 oder so sind die variablen dann entsprechend doppelt so groß


----------



## RedWing (11. August 2008)

Hallo,


Ryu1991 hat gesagt.:


> Auf unserem Wndows Xp x32 hat ein char ein int und die alle 32bit = 8byte.
> (zumindest habe ich es so gelernt)
> Auf Vista 64 oder so sind die variablen dann entsprechend doppelt so groß



ich hoffe euer Lehrer war kein Mathelehrer  da, wenn 1 Byte = 8 Bit sind, nach Adam Riese 32 Bit 4 Byte sind und nicht 8.

Ein char hat 1 Byte; ein int 4 Byte auf einer 32 Bit Maschine und 8 Byte auf einer 64 Bit Maschine.

Gruß,
RedWing


----------



## Ryu1991 (12. August 2008)

Es war nicht der Fehler meines Lehrers, sondern meiner, natürlich is 32/8 4 aber seit wann sind char und int nicht gleichgroß?


----------



## sheel (12. August 2008)

Also Zusammenfassung:
char: immer 1 Byte
double: immer 8 byte
int auf x86 (was ist x32?): 4byte
int auf 64bit zeug: 8byte

und 8 BIT = 1 BYTE


----------



## devDevil (12. August 2008)

Warum sollte sizeof(char) == sizeof(int) sein, wenn std::numeric_limits<char>::max() < std::numeric_limits<int>::max() ist?


----------



## RedWing (13. August 2008)

Hallo,


devDevil hat gesagt.:


> Warum sollte sizeof(char) == sizeof(int) sein, wenn std::numeric_limits<char>::max() < std::numeric_limits<int>::max() ist?



ich denke das das nicht zwangshalber so sein muss. Auf einer Architektur wo pro Byte 32 Bit allokiert sind, kann es auch durchaus vorkommen das sizeof(char) == sizeof(int) ist, nämlich 1. Gewöhnlich ist zwar ein Byte als Oktett definiert, allerdings kann ein Byte definitionsgemäß auch mehr als 8 Bit besitzen.



			
				Ryu1991 hat gesagt.:
			
		

> ... aber seit wann sind char und int nicht gleichgroß?



AFAIK definiert der Standard das sizeof(char) == 1 ist. Auf einer Architektur also wo gilt das ein Byte = 8 Bit sind, gilt meistens auch sizeof(char) < sizeof(int)

Gruß,
RedWing


----------

