# zahlen aus char in int variable schreiben



## Cristok (14. April 2005)

Naja nu hab ich das nächste problem.
bin schon etwas weiter gekommen aber nu häng ich wieder.

Also
ich hab ne eingegebene zahl in ner char variable z.b.:  21.59 
wie kriege ich es hin die 21 in eine int variable zu schreiben und die 59 in eine andere?

Hab schon meine bücher gewälzt aber irgendwie nix dazu gefunden.

Cristok


----------



## MFC openGL (14. April 2005)

1. Wenn man jeweils nur den Anfangsbuchstaben einer Zeile groß schreibt, dann hat man damit die Netiquette nicht beachtet...

2. Als erstes solltest du aus dem char  2 chars machen, indem du die Zahlen bis zum Punkt in ein char kopierst, und den anderen Teil in ein anderes char.

Dann nimmst du den 1. char, und benutzt die Funktion atoi(char...) die gibt dir dann einen integer zurück. Das selbe machste dann mit dem 2. char und du bist fertig.

3. Bei Fragen, fragen


----------



## Cristok (14. April 2005)

Also wie ich den ersten Teil (21) in ne andere char kopiere weiss ich.
Aber wie genau mach ich das mit dem Rest hinter dem Punkt?

Cristok


----------



## uhu01 (14. April 2005)

Hy!

Was hältst du von der Idee deine Zahl zuerst in einen int zu kopieren, so fallen die Nachkommastellen weg, welche du dann aus Ursprungszahl-Vorkommastellen bekommst. z.B. 
	
	
	



```
float cZahl = 3.44;
int iVorkomma = (int)cZahl;
float fNachkomma = cZahl - iVorkomma;
```

mfg
uhu01


----------



## MFC openGL (15. April 2005)

uhu01 hat gesagt.:
			
		

> Hy!
> 
> Was hältst du von der Idee deine Zahl zuerst in einen int zu kopieren, so fallen die Nachkommastellen weg, welche du dann aus Ursprungszahl-Vorkommastellen bekommst. z.B.
> 
> ...


 
Kannste auch machen, dann musste nur vorher den char mit atof() in ein float konvertieren, das geht auch...
Nur jenachdem ob du den Nachkomma Wert brauchst oder nicht, musste den mit der länge * 10 multiplizieren, und dann von float auch nach int konvertieren...

Und dann stellt sich mir die Frage was nun schneller ist...


----------



## Cristok (15. April 2005)

Hi
 Also das mit dem Float geht nicht weil, es gibt ja auch dumme User die anstatt 21.59 (also statt dem Punkt) nen Doppelpunkt oder ein anderes nicht numerisches Zeichen eingeben, somit ist es ja kein Float mehr, das soll auch gehen.
 Also muss ich irgendwie die Lösung von MFC openGL benutzen, aber wie krieg ich die Zahlen hinter dem Zeichen in eine char rein?


----------



## gehrti (15. April 2005)

Machs doch einfach nach der ganz alten Schule:  ;-) 


```
char cZeit[]="21.59\0";
	int iH=0, iMin=0, iIndex=0;
	do {
		iH=iH*10+(int)cZeit[iIndex]-48;
		iIndex++;
	} while (cZeit[iIndex]>=48 && cZeit[iIndex]<=57);
	iIndex++;	
	do {
		iMin=iMin*10 + ((int)cZeit[iIndex])-48;
		iIndex++;
	} while (cZeit[iIndex]>=48 && cZeit[iIndex]<=57);
```

ciao thomas


----------



## Tobias K. (15. April 2005)

moin


Wie wäre es hiermit:

```
char szZahl[10] = {"123.456");
float zahl = 0;

//sicherstellen das durch ein Punkt getrennt wird
for(int i=0; i<strlen(szZahl); i++)
    if(!(szZahl[i] >= '0' && szZahl[i] <= '9'))
        szZahl[i] = '.';

zahl = atof(szZahl);
```


mfg
umbrasaxum


----------



## RedWing (15. April 2005)

Hallo,


```
#include <iostream>

using namespace std;

int main(){
        char floatingpoint[] = "1234.23";
        int a = atoi(strtok(floatingpoint, ",."));
        int b = atoi(strtok(NULL, ",."));
        cout << "Vor dem Komma: " << a << " Nach dem Komma: " << b << endl;
}
```

Geht mit , und . 

Gruß

RedWing


----------



## Cristok (15. April 2005)

Nee das geht irgendwie alles nicht.
Wie gesagt statt dem Punkt kann auch jedes andere nicht numerische Zeichen hin und es soll trotzdem richtig erkannt werden.

Also man soll auch 21b54 schreiben können und es soll die 21 in einer int Variablen abgelegt werden und die 54 in der anderen int Variable.

Ein Kollege meinte das nicht numerische Zeichen kann man schon bei der Eingabe abfangen, nur wie?

Er meinte irgendwie was mit get() aber als ich das gelesen hatte war er schon wieder weg :-(

Cristok


----------



## RedWing (15. April 2005)

So gehts:

```
#include <iostream>

using namespace std;

int main(){
                char floatingpoint[] = "1234z23";
                int a = atoi(strtok(floatingpoint, ".,abcdefghijklmnopqrstuvwxyz"));
                int b = atoi(strtok(NULL, ".,abcdefghijklmnopqrstuvwxyz"));
                cout << "Vor dem Komma: " << a << " Nach dem Komma: " << b << endl;
}
```

http://www.cplusplus.com/ref/cstring/strtok.html

//edit 
oder: 
zu getch() kann ich nicht viel sagen aber darüber gibts schon ne Menge im 
Forum einfach mal die Suche benutzen.

Gruß

RedWing


----------



## Matthias Reitinger (15. April 2005)

Ich hab auch noch eine Lösung anzubieten:


```
#include <iostream>

using namespace std;

int main()
{
	char szFloat[] = "1234:23";
	int a, b;

	for (int i = 0; i < strlen(szFloat); ++i) {
		if (szFloat[i] < '0' || szFloat[i] > '9') {
			szFloat[i] = '\0';
			a = atoi(szFloat);
			b = atoi(szFloat + i + 1);
			cout << "Vor dem Komma: " << a << " Nach dem Komma: " << b << endl;
			break;
		}
	}
}
```


----------



## canuzzi (16. April 2005)

Dann geb ich noch ne c Loesung 


```
#include <stdio.h>

int main(void) {
    char c;
    int a=0,b=0;

    /* Erste Integer-Zahl einlesen */
    while((c=getchar())!=EOF && c>='0' && c<='9')
	a=10*a+c-'0';

    /* Fehler, falls keine zweite Integer-Zahl */
    if (c==EOF)
	return -1;

    /*Zweite Integer-Zahl einlesen */
    while((c=getchar())!=EOF && c>='0' && c<='9')
	b=10*b+c-'0';

    printf("Zahl1: %i\nZahl2: %i\n",a,b);

    return 0;
}
```

Du muesstes das ganze natuerlich noch um Ausnahmebehandlungen etc. erweitern.


----------



## MFC openGL (16. April 2005)

Ihr seid ja wahnsinnig...  ich glaube ich habe noch nie soviele Codebeispiele zu einer Frage gesehen wie hier 

Aber sollte das Problem nachher immer noch nicht gelößt sein, spendiere ich auch noch ne Lösung *ggg*


----------

