Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Auslesen einer zuvor gespeicherten Datei klappt nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.06.2004, 22:02 Uhr
~Nervenbündel
Gast


Schreibe gerade ein Programm zur Bücherverwaltung. Habe alles soweit fertig(klappt auch bis auf`s BuecherLaden), nur mit der Ausgabe(BuecherLaden) meiner zuvor gespeicherten Datei klappt es nicht so richtig. Ich möchte die Datei mit gesamten Inhalt ausgeben, zB:

Buch Nr. 1
Titel: blabla
Autor: ebenso
ISBN-Nr: 123
Preis:12.3

Irgendwo steckt in meinem Programm der Fehler, kann mir da einer von Euch helfen?
schon mal Danke an Euch alle


C++:
// Implementierungsdatei des Moduls 'textfiles.h'
// textfiles.cpp

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>

using namespace std;
#include "textfiles.h"

int eingabe_m;
string eingabe, ausgabe;

//Variablen für die Datei einlesen
ifstream strom;                //strom zum Lesen des Dateistroms
ofstream schreiben;
string dateiname;
//Variablen für die Anzahl der Bücher im Schrank
unsigned anzahl_buecher;    //anzahl_buecher Anzahl der Buecher im Schrank
unsigned aktuelle_buecher;    //aktuelle_buecher Zählvariable für Schleifen
const int max_buecher=200;    //maximale Anzahl der Buecher im Buecherschrank
//Variablen für die Titel Suche
string autor, verlag, titel;
string nummer;
string isbn;
string E_jahr;
string preis;
//-------------------------------------------------------------------------
//buecherschrank aufstellen
buecher buecherschrank[max_buecher];
//-------------------------------------------------------------------------
//buecher aus Datei einlesen
void BuecherAnlegen(void)
{
//Schleifenzähler für die Anzahl der zu speichernden Bücher.
cout << "Wieviele Buecher moechten Sie anlegen? ";
cin >> anzahl_buecher;
cout << endl;
//Schleife zum manuellen Einlesen der Daten
for (aktuelle_buecher=0; aktuelle_buecher < anzahl_buecher; ++aktuelle_buecher)    
{        
cout << "Buch " << aktuelle_buecher + 1 << endl;
cout << "--------------------------------------" <<endl;    
cout << "ISBN-Nummer:.......";
cin >> buecherschrank[aktuelle_buecher].isbn;        
cout << "Buchtitel..........";
cin >>     buecherschrank[aktuelle_buecher].titel;        
cout << "Autor..............";
cin >>     buecherschrank[aktuelle_buecher].autor;        
cout << "Erscheinungsjahr...";
cin >>     buecherschrank[aktuelle_buecher].E_jahr;        
cout << "Preis..............";
cin >>     buecherschrank[aktuelle_buecher].preis;        
cout << "Verlag.............";
cin >>     buecherschrank[aktuelle_buecher].verlag;    
}
cout << endl << endl << endl;
TitelSortieren();
menueAufruf();
}
//-------------------------------------------------------------------------
void BuecherAusgeben(void)
{
for (aktuelle_buecher=0; aktuelle_buecher < anzahl_buecher; ++aktuelle_buecher)
{
cout << "Buch " << aktuelle_buecher + 1 << endl;
cout << "ISBN-Nummer:......." << buecherschrank[aktuelle_buecher].isbn << endl;
cout << "Buchtitel.........." << buecherschrank[aktuelle_buecher].titel << endl;
cout << "Autor.............." << buecherschrank[aktuelle_buecher].autor << endl;
cout << "Erscheinungsjahr..." << buecherschrank[aktuelle_buecher].E_jahr << endl;
cout << "Preis.............." << buecherschrank[aktuelle_buecher].preis << endl;
cout << "Verlag............." << buecherschrank[aktuelle_buecher].verlag << endl;
cout << "--------------------------------------" << endl << endl;    
}
}
//-------------------------------------------------------------------------
//buecher im Schrank sortieren
void TitelSortieren(void)
{
bool tausch ;
  do
   {
    tausch = false;
    for (aktuelle_buecher = 0; aktuelle_buecher < anzahl_buecher-1; ++aktuelle_buecher)
       {
            if (buecherschrank[aktuelle_buecher].titel > buecherschrank[aktuelle_buecher+1].titel)
            {
// Variable nur für schleife            
//Speichern der Werte in einer Hilfsvariable (Dreieckstausch)    
titel        =    buecherschrank[aktuelle_buecher].titel;
autor         =    buecherschrank[aktuelle_buecher].autor;  
E_jahr        =    buecherschrank[aktuelle_buecher].E_jahr;
verlag        =    buecherschrank[aktuelle_buecher].verlag;
preis        =    buecherschrank[aktuelle_buecher].preis;
nummer        =    buecherschrank[aktuelle_buecher].isbn;    
            
//Vertauschen der Strukturfelder
buecherschrank[aktuelle_buecher].titel = buecherschrank[aktuelle_buecher+1].titel;
buecherschrank[aktuelle_buecher].autor = buecherschrank[aktuelle_buecher+1].autor;
buecherschrank[aktuelle_buecher].E_jahr = buecherschrank[aktuelle_buecher+1].E_jahr;
buecherschrank[aktuelle_buecher].verlag = buecherschrank[aktuelle_buecher+1].verlag;
buecherschrank[aktuelle_buecher].preis = buecherschrank[aktuelle_buecher+1].preis;
buecherschrank[aktuelle_buecher].isbn = buecherschrank[aktuelle_buecher+1].isbn;

//Zürückschreiben der alten Werte aus den Hilfsvariablen in den Bücherschrank
buecherschrank[aktuelle_buecher+1].titel    = titel;
buecherschrank[aktuelle_buecher+1].autor    = autor;
buecherschrank[aktuelle_buecher+1].E_jahr    = E_jahr;
buecherschrank[aktuelle_buecher+1].verlag      = verlag;
buecherschrank[aktuelle_buecher+1].preis    = preis;
buecherschrank[aktuelle_buecher+1].isbn    = nummer;
            
tausch = true;
            }
        }
    }
    while (tausch);
}
//-------------------------------------------------------------------------
bool openForReading(ifstream & s, string filename)
{  s.clear();
    s.open(filename.c_str());
    return s;}
//-------------------------------------------------------------------------
void noMoreReading(ifstream & s)
{    s.close();}
//-------------------------------------------------------------------------
bool openForWriting(ofstream & s, string filename)
{   s.clear();
    s.open(filename.c_str());
    return s;}
//------------------------------------------------------------------------
void noMoreWriting(ofstream & s)
{    s.close();}
//------------------------------------------------------------------------
void BuecherLaden(void)
{
// Dateinamen lesen und Datei öffnen
while(cout << endl << "Dateiname: ", cin >> dateiname, !openForReading(strom, dateiname))
{
  cout << "Datei " << dateiname << " kann nicht geoeffnet werden." << endl;
};
aktuelle_buecher=0;
while (strom >> nummer)
    {
        eingabe = "";
        ausgabe = "";
            while(strom >> eingabe && eingabe != "***")
    {
                 ausgabe += (eingabe += " ") ;            
     buecherschrank[aktuelle_buecher].titel = ausgabe;break;    
      while(strom >> eingabe && eingabe != "***")
       {
                 ausgabe += (eingabe += " ") ;            
                 buecherschrank[aktuelle_buecher].autor = ausgabe;break;      
         while(strom >> eingabe && eingabe != "***")
         {
                      ausgabe += (eingabe += " ") ;            
          buecherschrank[aktuelle_buecher].E_jahr = ausgabe;break;  
            while(strom >> eingabe && eingabe != "***")
            {
                          ausgabe += (eingabe += " ") ;                        
              buecherschrank[aktuelle_buecher].verlag = ausgabe;break;    
                       while(strom >> eingabe && eingabe != "***")
               {
                             ausgabe += (eingabe += " ") ;            
                          buecherschrank[aktuelle_buecher].preis = ausgabe;break;
          while(strom >> eingabe && eingabe != "***")
           {
                                ausgabe += (eingabe += " ") ;            
                    buecherschrank[aktuelle_buecher].isbn = ausgabe;break;
           }}}}}}                
    aktuelle_buecher++;        
       }
       anzahl_buecher = aktuelle_buecher;
       cout << "Es wurde(n) " << anzahl_buecher << " Buch(Buecher)          
       eingelesen."
<< endl << endl;
       BuecherAusgeben();
       noMoreReading(strom);
       menueAufruf();
//-------------------------------------------------------------------------
void BuecherSpeichern(void)
{//Schleife  Bücher zu speichern.
cout << endl;
cout << "Dateiname angeben: " ;
cin >> dateiname;
openForWriting(schreiben, dateiname);    
for(aktuelle_buecher = 0; aktuelle_buecher < anzahl_buecher;  
aktuelle_buecher++ )
  {
   schreiben    
   << "Buch Nr." << aktuelle_buecher + 1 << endl
   << "----------------------------------------------" << endl
   << "Titel: " << buecherschrank[aktuelle_buecher].titel    << "***" << endl
   << "Autor: " <<buecherschrank[aktuelle_buecher].autor << "***" << endl
   << "Erscheinungsjahr: "<< buecherschrank[aktuelle_buecher].E_jahr    
   << "***" << endl
   << "Verlag: " << buecherschrank[aktuelle_buecher].verlag << "***" << endl
   << "Preis: " << buecherschrank[aktuelle_buecher].preis    << "***" << endl
   << "ISBN-Nummer: " << buecherschrank[aktuelle_buecher].isbn << endl<<  
   endl;   }
noMoreWriting(schreiben);
cout<<"fertig"<<endl<<endl;    
}        

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.06.2004, 22:40 Uhr
ao

(Operator)



Zitat:
~Nervenbündel postete
... nur mit der Ausgabe(BuecherLaden) meiner zuvor gespeicherten Datei klappt es nicht so richtig...

*Was* klappt nicht? Bitte genauer beschreiben. Hab keine Lust, Hunderte Zeilen Sourcecode zu lesen ohne Fehlerbeschreibung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.06.2004, 06:19 Uhr
~Nervenbündel
Gast


Sorry, versuche es mal genauer zu beschreiben,
es wird ungefähr so ausgegeben:
Buch Nr. 1 Buch Nr 1
Titel: blabla
Autor: ebenso
ISBN-Nr: 123
Preis:12.3

Buch Nr. 2 Titel
Titel: blabla
Autor: ebenso
ISBN-Nr: 123
Preis:12.3

Buch Nr. 3 Autor
Titel: blabla
Autor: ebenso
ISBN-Nr: 123
Preis:12.3

u.s.w.

d.h. ich will ein Buch ausgeben (ich lade 1 Datei), es werden aber 8 Bücher ausgegeben, außerdem erscheint dahinter bei jedem Buch zusätzlich nochmals Titel, Autor, Preis, ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.06.2004, 09:40 Uhr
ao

(Operator)


Also ein Fehler in der Programmlogik. So was findet man am besten mit einem Debugger. Welchen Compiler verwendest du?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.06.2004, 06:15 Uhr
~Nervenbündel
Gast


MSV Aber mit dem Debugger hab ich leider noch nicht gearbeitet...
Allerdings hab ich es schon etwas verbessert:

Buch Nr. Buch Nr 1 Titel: blabla Autor: ebenso ISBN-Nr: 1234 Preis: 12.40 Verlag: keineAhnung
Titel:
Autor:
ISBN-Nr:
Preis:
Verlag:

Auslesen tuts also, nur nicht so, wie es sein sollte...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.06.2004, 13:59 Uhr
~Nervenbündel
Gast


Danke für Deine Mühe, hab`s jetzt hinbekommen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: