# Ein- und Auslesen in char-Array



## DeChecka (28. Mai 2005)

Hi Leute!
Habe folgendes Problem:
Ich möchte Wörter aus einer Textdatei in ein zweidimensionales char-Array einlesen.
Dabei interessieren mich nur Wörter mit Buchstaben aus dem normalen Alphabet (also A-Z bzw. a-z) und der Umlaut "ü".

Erstmal die Deklarationen:

```
char lesen[40][34], zeichen;
int i=0, j=0;
```


Das hab ich mal so gemacht:

```
ifstream generator("Generator.txt");
 while(generator)/* Einlesen der Teamnamen aus "Generator.txt" */
 {
  zeichen = generator.get();
  if(((zeichen >= 65) && (zeichen <= 90)) || ((zeichen >= 97) && (zeichen <= 122))) /* Überprüfung auf A-Z bzw. a-z */
  {
   lesen[i++][j] = zeichen;
   lesen[i][j] = '\0';
  }
  if(zeichen == 'ü') /* Spezialfallbehandlung "ü": Umformen zu "ue" */
  {
   lesen[i++][j] = 'u';
   lesen[i++][j] = 'e';
   zeichen = 'e';
   lesen[i][j] = '\0';
  }
  if(((!((zeichen >= 65) && (zeichen <= 90))) && (!((zeichen >= 97) && (zeichen <= 122)))) && (i != 0))
  {
   ++j;
   i = 0;
  }
 }
 generator.close();
```
Die ganzen logischen Operatoren bei den Bedingungen stimmen, da bin ich mir sicher. Da braucht ihr euch also nicht dran aufzuhalten.

Nun will ich allerdings die Wörter aus dem char-Array wieder auslesen und in eine andere Textdatei packen.
Das hab ich so versucht:

```
ofstream tippspieltext("Tippspieltext.txt");
 i = 0;
 j = 0;
 while(j <= 34)
 {
  tippspieltext << lesen[i][j];
  if((lesen[i][j] == '\0') && (i != 0))
  {
   if(j%2 == 0)
    tippspieltext << " ";
   if(j%2 != 0)
    tippspieltext << "\n";
   ++j;
   continue;
  }
  ++i;
 }
 tippspieltext.close();
```
Allerdings läuft das nicht, in der Datei stehen nur einzelne Buchstaben und Wortfetzen mit einer Menge von Leerzeichen...

Ich weiß nicht, an was das liegt, aber das Programm schreibt nur Wortfetzen in die Textdatei...

Ich hoffe, ihr könnt mir weiterhelfen!

MfG
      DeChecka


----------



## Tobias K. (28. Mai 2005)

moin


Bist du sicher das nach dem einlesen der Datei, das richtige in "lesen"steht?
Poste auch mal die Datei die du einliesst, dann kann ich das eben testen und den/die Fehler suchen.


mfg
umbrasaxum


----------



## DeChecka (28. Mai 2005)

Hmm, also einen Fehler hab ich mal gefunden...
Ich hab hier beim Schreiben in eine Datei das "i = 0" vor dem "continue" vergessen... Allerdings geht es immer noch net ganz so, wie ich es wünsche, aber es sind schon manche Wörter erkennbar...
Es stehen jetzt fast immer zwei vollständige Wörter in einer Zeile, aber es sind immer zwei Leerzeichen statts einem dazwischen.

```
while(j <= 34)
 {
  tippspieltext << lesen[i][j];
  if((lesen[i][j] == '\0') && (i != 0))
  {
   if(j%2 == 0)
    tippspieltext << " ";
   if(j%2 != 0)
    tippspieltext << "\n";
   ++j;
   i = 0;
   continue;
  }
  ++i;
 }
```

Hoffe, ihr könnt mir weiterhelfen!

MfG
      DeChecka


----------



## DeChecka (28. Mai 2005)

Ok, hab den Fehler gefunden, hab beim zweiten Wert der Arraydeklaration einfach bisschen größer (36) einstellen müssen.

Danke noch trotzdem @umbrasaxum!

MfG
       DeChecka


----------



## DeChecka (29. Mai 2005)

Eine Frage habe ich aber doch noch...

```
cout << "Wann ist Abgabefrist (tt.mm.jj., Stunden:Minuten Uhr)?" << endl;
getline(cin, abgabe, '\n');
cin.ignore();
```
Deklaration von "abgabe":

```
string abgabe;
```
Ich kann aber "abgabe" weder in Dateien schreiben, noch auf dem Bildschirm ausgeben...
So:

```
cout << abgabe;
```
geht es also leider nicht...
An was kann das liegen?

MfG
      DeChecka


----------



## Tobias K. (29. Mai 2005)

moin



```
cout<< abgabe.c_str();
```


mfg
umbrasaxum


----------



## DeChecka (29. Mai 2005)

Hmmm, das will bei mir einfach nicht funktionieren...
Ich mache zum Test:

```
cout<< abgabe.c_str();
getch();
```
Aber der String wird nicht angezeigt...

MfG
      DeChecka


----------



## Tobias K. (29. Mai 2005)

moin


Versuch statt getch() mal cin.get()


mfg
umbrasaxum


----------



## DeChecka (29. Mai 2005)

Bei mir sieht das jetzt so aus:

```
getline(cin, abgabe, '\n');
cin.ignore();
cout << abgabe.c_str();
cin.get();
```

Das Komische daran ist: "cin.get()" führt er gar nicht aus... Weiter oben im Programm verwende ich "cin.get()" auch mal, da geht das aber normal, bis auf das, dass eine Leerzeile gelassen wird.
Ich hab mich auch schon gewundert, wieso ich mit "cin.get(abgabe, sizeof(abgabe))" - hierzu hatte ich abgabe natürlich als char-Array definiert - das nicht einlesen kann...

Das ist echt Mist.
Was ist da nur los?

MfG
       DeChecka


----------



## Tobias K. (29. Mai 2005)

moin


Dann mach nochmal vor dem cin.get(); oder vor dem getch(): ein fflush(stdin);


mfg
umbrasaxum


----------



## DeChecka (29. Mai 2005)

Perfekt hey!

Habe das "fflush(stdin);" jetzt vor dem "getline(cin, abgabe, '\n')" gesetzt.

Jetzt klappt es! Danke!

MfG
      DeChecka


----------

