# [C++] String als Zahlen auslesen



## paddymann (23. Juni 2005)

Hallo,

ich sach nur mal vorweg, dass ich die Suchfunktion benutzt habe, aber keine Lösung gefunden habe.
Zu meinem Problem: ICh habe eine beliebige .dat Datei, in der Daten z.B. so enthalten sind:
123 54 778 984 12 234 23 678

Ich möchte diese Zahlen einzeln auslesen. Und zwar nicht als String sonder numerisch. Am besten wärs wenn ich die in einer Variablen zuweisen könnte.
Geht das noch mit dem normalen ifstream oder muss ich da doch das für mich komplizierte "istringstream" benutzen?
Danke!


----------



## elfvyn (23. Juni 2005)

Also du könntest Die Zahl als string ganz normal auslesen auslesen und dann den string
(komplett oder gestückelt..weiss ja nicht ob du einzelne Ziffern willst) mit atoi() in integer umwandeln!

```
int atoi( const char *string );
```


----------



## Tobias K. (23. Juni 2005)

moin


Da du anscheinend in C++ programmieren willst, würde ich es ainfach so machen:

```
#include <fstream>

int main()
{
	int nZahlen[10];
	int i = 0;

	std::ifstream datei("test.txt");

	while(datei)
	{
		datei >> nZahlen[i++];
	}

	return 0;
}
```


mfg
umbrasaxum


----------



## paddymann (23. Juni 2005)

Und wie kann ich die einzelnen Zahlen dann ausgeben?


----------



## Tobias K. (23. Juni 2005)

moin


Z.B.:

```
cout<< nZahlen[0];
```
Lern erstmal die Grundlagen!


mfg
umbrasaxum


----------



## paddymann (23. Juni 2005)

soweit war ich auch schon! Aber so wird nur die erste Zahl immer wieder ausgegeben...


----------



## Tobias K. (23. Juni 2005)

moin


Für die zweite Zahl:

```
cout<< nZahlen[1];
```


mfg
umbrasaxum


----------



## paddymann (23. Juni 2005)

Warum funktioniert das nicht?

Code:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int schluss;
    ifstream anyStream;    
    anyStream.open("test.dat", ios::in);

    int nZahlen[10];


    for (int n=0;n<10;n++)
    {
        anyStream >> nZahlen[10];
        cout << nZahlen[n];
    }

    cin >> schluss;
}


----------



## Tobias K. (23. Juni 2005)

moin


Die Zeile

```
anyStream >> nZahlen[10];
```
ist falsch.

```
anyStream >> nZahlen[n];
```
muss es heissen. Da du immer nur in ein Element schreiben kannst.
Lern wirklich erstmal die Grundlagen, und das ist wirklich was elementares, bevor du solche Sachen versuchst.


mfg
umbrasaxum


----------



## paddymann (23. Juni 2005)

dAs war jetz der falsche Code den ich da reinkopiert hab. Eigentlich hatte ich da zuerst auch n stehen. Aber da gibt er immer noch Zahlen aus die garnicht in der Text Datei stehen.


----------



## Tobias K. (23. Juni 2005)

moin


Das könnte daran liegen das du, komme was wolle, 10 Zahlen einliesst ohne zu überprüfen ob es soviele Zahlen überhaupt gibt.

Ich hab dir doch weiter oben ein funktionierendes Beispiel gegeben.


mfg
umbrasaxum


----------



## paddymann (23. Juni 2005)

Ja aber ich weiss ja nicht wieviele Zahlen in der Textdatei sind. Das kann ja unterschiedlich sein. Und wenn das 100 Zahlen sind kann ich in den Quellcode doch nich nZahlen[0} bis nZahlen[100] schreiben.


----------



## Tobias K. (23. Juni 2005)

moin


Dann änder bei

```
#include <fstream>

int main()
{
    int nZahlen[10];
    int i = 0;

    std::ifstream datei("test.txt");

    while(datei)
    {
        datei >> nZahlen[i++];
    }

    return 0;
}
```
die 10 bei nZahlen[10] einfach nach nZahlen[100].
Das while(datei) sorgt dafür das nur eingelesen wird bis die Datei zu ende ist, nach der Schleife steht in i die Anzahl der eingelesen Zahlen.


mfg
umbrasaxum


----------

