C++ Dateien einlesen

Bumbbleman

Erfahrenes Mitglied
Hallo!
Ich habe ein kleines Problem bei dem Einlesen von Daten wenn ich das mit Parameter übergabe mache.
Ich hab auch mal den Quellcode gepostet.
 
Hallo!
Ich habe ein kleines Problem bei dem Einlesen von Daten wenn ich das mit Parameter übergabe mache.
Ich hab auch mal den Quellcode gepostet.

Die Klasse:

class inv
{
public:
long w[40];
long fs, ep, lvl;
string held, r_password;
string namee, password;
void load( long silber, long gold, long diam, long b_gold, long b_silber, long b_diam, long ap, long awp,
long schw, string side );
};

Die Methode:

void inv::load( long silber, long gold, long diam, long b_gold, long b_silber, long b_diam, long ap, long awp,
long schw, string side )
{
inv i;
cout << "Gebe bitte deine Login-Daten an." << endl;
cout << "Name: ";
cin >> namee;
cout << "Passwort: ";
cin >> password;
ifstream np_ein;
np_ein.open( namee.c_str(), ios::in );
np_ein >> r_password;
np_ein >> held;
np_ein >> silber;
np_ein >> gold;
np_ein >> diam;
np_ein >> b_gold;
np_ein >> b_silber;
np_ein >> b_diam;
np_ein >> ep;
np_ein >> lvl;
np_ein >> ap;
np_ein >> awp;
np_ein >> w[0];
np_ein >> w[1];
np_ein >> w[2];
np_ein >> w[3];
np_ein >> w[4];
np_ein >> w[5];
np_ein >> w[6];
np_ein >> w[7];
np_ein >> w[8];
np_ein >> w[9];
np_ein >> w[10];
np_ein >> w[11];
np_ein >> w[12];
np_ein >> w[13];
np_ein >> w[14];
np_ein >> w[15];
np_ein >> w[16];
np_ein >> w[17];
np_ein >> w[18];
np_ein >> w[19];
np_ein >> w[20];
np_ein >> w[21];
np_ein >> w[22];
np_ein >> w[23];
np_ein >> w[24];
np_ein >> w[25];
np_ein >> w[26];
np_ein >> w[27];
np_ein >> w[28];
np_ein >> w[29];
np_ein >> w[30];
np_ein >> w[31];
np_ein >> w[32];
np_ein >> w[33];
np_ein >> w[34];
np_ein >> w[35];
np_ein >> w[36];
np_ein >> w[37];
np_ein >> w[38];
np_ein >> w[39];
np_ein >> fs;
np_ein >> schw;
np_ein >> side;
np_ein.close();


}

Und Aufruf der Funktion in der main()-Funktion:

inv i;

i.load( m.silber, m.gold, m.diam, m.b_gold, m.b_silber, m.b_diam, aw.ap, aw.awp, sch.schw, si.side );
 
Ähm vielleicht beschreibst du dein Problem mal genauer, damit man dir auch helfen kann. Und der Quellcode hätte auch noch gerade so in den Threadbeginn gepasst^^
 
okay....also ausführen lässt sich das Programm schon aber wenn ich diese Dateien Aufrufe oder abfrage zeigt er mir 0 bei den long werten und nichts bei den strings an.

Also ein Bsp:

cout <<"Dein Held: "<< i.held << endl;

Ausgabe:

Dein Held:
 
Zuletzt bearbeitet:
Hallo Bumbbleman.

Nach 48 Beiträgen solltest du eigentlich wissen wie man die Code Tags verwendet und das man Beiträge auch noch nachträglich bearbeiten kann wenn man etwas vergessen hat...

Wenn nicht, wird es höchste Zeit dich mit den Gepflogenheiten und der Benutzung des Forums vertraut zu machen. Und halte dich bitte an die Netiquette.

Zu deinem Problem: Poste mal den gesamten Code - und zwar mit Code Tags! Poste mal den Inhalt der Datei die du da einlesen willst.

Ein paar Anmerkungen:

1. Hast du schonmal etwas von Schleifen gehört? Dort 40 Mal die gleiche Anweisung mit Ausname der Indexnummer zu schreiben ist schon sportlich. Eigentlich ist man als Programmierer zu faul dazu.

2. Du prüfst nicht ob die Datei überhaupt geöffnet werden konnte.

Gruß
 
Hi!
1. Ich hab jetzt zum ersten mal meinen Code gepostet.
2. Sonst mach ich das auch immer mit den Schleifen. Ich hatte gerade eine Programmierpause hinter mir und heute erst wieder mal angefangen.
3.Die Netiquette hab ich jetzt nochmals aufmerksam gelesen.
4.Wie kann ich denn meinen Quellcode gut posten?
5. Meinst du, dass ich mein ganzes Programm posten soll?
 
4.Wie kann ich denn meinen Quellcode gut posten?
Indem du den Code in [code=cpp] .. [/code] Tags einschließt. Das hättest du auch ruhig selbst herausfinden können (Suchfunktion ;))...
5. Meinst du, dass ich mein ganzes Programm posten soll?
Ja. Besser ist es ein vollständiges (minimales) (Beispiel-)Programm zu posten. Das erhöht die Chance das jemand das Problem erkennen kann und dir hilft ungemein.

Außerdem ist auch die Eingabedatei interessant.

Gruß
 
So
ich hab jetzt ein gekürztest Beispielprogramm geschrieben:

C++:
#include <fstream>
#include <iostream>
using namespace std;

class side
{
public:
  string side;
  string gut, boese;
};

class money
{
public:
  long silber, gold, diam, b_gold, b_silber, b_diam, e_gold, e_silber, e_diam;
};


class inv
{
public:
  long , ep, lvl;
  string held, r_password;
  string namee, password;
  void load( long silber, long gold, long diam, long b_gold, long b_silber, long b_diam,
        string side );
};



void inv::load( long silber, long gold, long diam, long b_gold, long b_silber, long b_diam,
     string side )
     {
       inv i;
       cout << "Gebe bitte deine Login-Daten an." << endl;
       cout << "Name: ";
       cin >> namee;
       cout << "Passwort: ";
       cin >> password;
       ifstream np_ein;
       np_ein.open( namee.c_str(), ios::in );
       np_ein >> r_password;
       np_ein >> held;
       np_ein >> silber;
       np_ein >> gold;
       np_ein >> diam;
       np_ein >> b_gold;
       np_ein >> b_silber;
       np_ein >> b_diam;
       np_ein >> ep;
       np_ein >> lvl;
       np_ein >> side;
       np_ein.close();
       if ( !np_ein )
       {
         cout << "Datei konnte nicht geoeffnet werden" << endl;
       }


}

int main()
{
   inv i;
   money m;
   side si;


  i.load( m.silber, m.gold, m.diam, m.b_gold, m.b_silber, m.b_diam, si.side );
if(i.password == i.r_password)
{

         cout << endl;
         cout << "----------------" << endl;
         cout << i.held << endl;
         cout << "Seite: " << si.side << endl;
         cout << "Silber: " << m.silber << endl;
         cout << "Gold: " << m.gold << endl;
         cout << "Diamanten: " << m.diam << endl;
         cout << "Ep: " << i.ep << endl;
         cout << "Level: " << i.lvl << endl;
         cout << "----------------" << endl;
         Sleep( 2000 );

}

  return 0;
}
Aus der Datei soll folgendes ausgelesen werden:
(genau so steht es in der Datei)
C++:
qay           //passwort
DerMächtigeJin  /held
5  //silber
0 //gold
0 //diam
0
0
0
5  //ep
1 //lvl
BoeseSeite //seite der du angehörst (gut oder böse)

Jetzt hab ich aber noch den Fehler, dass wenn man das Programm ausführt sagt:
"Datei konnte nicht geoeffnet werden" aber er gibt trotzdem ein paar richtige Werte aus.
 
Hi.

Es ist unsinnig den Status der Datei zu prüfen, nachdem alles schon gelaufen ist.

Ob die Datei geöffnet werden konnte prüft man am besten gleich nachdem man die Datei geöffnet hat. (und nicht nachdem man die Datei geschlossen hat - selbstverständlich ist die Datei dann nicht mehr gültig. :confused::confused::confused:)

Dann verwendest du Call-By-Value. So kannst du natürlich die Werte nicht aus der Funktion an den aufrufenden Programmteil zurückgeben. Du müßtest Referenzen verwenden:
C++:
void inv::load( long& silber, long& gold, long& diam, long& b_gold, long& b_silber, long& b_diam, string& side ) {
  ...
  ifstream np_ein(namee.c_str());

  if (!np_ein.is_open()) {
    cerr << "konnte datei nicht öffnen.\n";
    return;
  }
  
  if (np_ein >> r_password
       >> held
       >> silber
       >> gold
       >> diam
       >> b_gold
       >> b_silber
       >> b_diam
       >> ep
       >> lvl
       >> side) 
  {
    // alles komplett eingelesen.
  } else {
    cerr << "fehler beim einlesen.\n";
  }
Gruß
 
Zurück