Char To Int
-
Hi,
ist dieser Code korrekt? Es werden Zeichen (Zahlen) aus einer Datei ausgelesen (klappt) und diese sollen dann in int umgewandelt werden (klappt nicht). Hier der (ich hoffe) relevante Codeteil// int mapData[18][25], mapFile geöffnet char temp[25]; for(zeile; zeile < 18; zeile++) { fgets(temp, 25, mapFile); for(int i=0; i<25; i++) { mapData[zeile][i] = atoi(&temp[i]); // Hier liegt der Fehler denke ich } }
gebe ich nun zB mapData[0][0] aus, bekomme ich irgendeine grosse Minuszahl.
Ich komme da irgendwie nicht weiter...schonmal danke
-
schau dir mal wie atoi arbeitet. Man übergibt einen String (kein einzelnes char) und der komplette String wird bis zu \0 oder einer nicht-zahl in einen integer umgewandelt.
-
Hm, stimmt auch wieder. Wie mache ich das dann am besten?
-
Wanderer schrieb:
Hm, stimmt auch wieder. Wie mache ich das dann am besten?
Willst Du in mapData die einzelnen _Zahlen_ oder die _Ziffern_ haben?
Wenn also jemand str="123456" eingibt, soll dann mD[..][0] = 1, mD[..][1] = 2, ... mD[..][5] = 6 sein? Die Ziffer ergibt sich aus dem Char weniger der Zeichensatz-0. '1'-'0' == 1, str[1]-'0'==2.Guck' dir übrigens mal deine Schleifenbedingung nochmal an. Du läufst immer bis 25, willst aber nur bis zum Ende des Strings.
-
In der Datei stehen viele einzelne Zahlen, eine Reihe hat 25 Zahlen und es gibt 18 Reihen. Ich will quasi dieses Muster in mapData übertragen, da die einzelnen Zahlen verschiedene Grafiken darstellen...
-
Niemand eine Idee?
-
Also, 25 Zahlen? Dann sieht eine Zeile der Datei zB so aus:
987 234 0 -123 23 999999 -3 345 765 7896452 1 2 3 4 5 6 7 8 9 0 0 0 0
oder doch eher nur
11111111111111111111000?
Ersteres löst man dadurch, daß man sscanf auf den String der gesamten gefgetsten Zeile loslässt (oder auch atoi in Abschnitten), das zweite so wie oben schon beschrieben (mapData[i] = str[i]-'0').
-
Letzteres. Habe mich bei deiner ersten Antwort verlesen
Jetzt klappts, vielen Dank