![]() |
|
|||||||
| C/C++ Das Forum für die C/C++ Begeisterten unter Euch - hier wird geholfen - hier wird informiert - Interessenten für einen Moderator-Posten bitte bei Jesse/Nightwolf via PN melden !!! |
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Registered User
Join Date: Jun 2009
Location: Germany
Posts: 1
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
aus binärdatei auslesen(c++)
hallo leute,
ich hab ein kleines Problem bei einem Programm für die Uni. ich soll ein vokabeltrainer schreiben.(in c++) Diser speichert alle vokabeln in einer datei(binärdatei). das schreiben in die datei klappt auch ohne probleme.wenn ich jetz jedoch auslesen will klappt das net. ich versuch das immoment so: hierbei werden die Vokabeln inerhalb einer struktur Verwaltet die so aussiet: Code:
struct VOKABEL
{
char deutsch[40];
char englisch[40];
int zaeler;
};
jedoch gibt es hier mehrere Fehler die ich net ganz verstehe. 1. klappt irendwas beim auslesennicht(sprich ic hmach bei f_out.read was falsch) 2. funzt der f_out.eof() nicht(dh er findet das datei ende nicht und ich hab mir da ne Endlosschleife gbastelt(andere funktion aus der deise aufgerifen wird)) 3. gibt f_out.tellg(); nach dem auslesen nen -1 zurück. //den hab ich nur zur fehler suche eingebaut Code:
int LERNEN::ausgabe(struct VOKABEL & vokabel_ausgabe)
{
int position=0;
position=f_out.tellg();
//f.seekg(-40, ios::cur);
//f_out.read((char *)&vokabel_ausgabe,sizeof(vokabel_ausgabe));
f_out.read((char *)&vokabel_ausgabe.deutsch,40*sizeof(char));
f_out.read((char *)&vokabel_ausgabe.englisch,40*sizeof(char));
f_out.read((char *)&vokabel_ausgabe.zaeler,sizeof(int));
position=f_out.tellg();
if (f_out.eof())//das klappt auch net
{
error=-1;
}
return(error);
};
Last edited by BabCom on 06-06-2009 at 15:50 |
|
|
|
| Sponsored Links | |
|
|
#2 |
|
Excel Moderator
![]() Senior Member (Board-Inventar)
Join Date: Oct 2004
Location: Ilsfeld
Posts: 2.470
Abgegebene Danke: 10
Erhielt 149 Danke für 147 Beiträge
|
Abend,
vokabel_ausgabe.deutsch ist bereits eine Adresse, das & davor ist zu viel. eof() ist wohl bei Lesen&Schreiben nicht geeignet, teste vielleicht den Rückgabewert von tellg auf -1. cu, Bernd -- vokabel.h: Code:
#include <fstream>
struct VOKABEL
{
char deutsch[40];
char englisch[40];
int zaehler;
};
class Lernen
{
public:
Lernen();
~Lernen();
int eingabe(struct VOKABEL &v);
void ausgabe(struct VOKABEL &v);
void homeg();
private:
std::fstream f_out;
};
Code:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include "vokabel.h"
using namespace std;
int main()
{
Lernen l;
struct VOKABEL v;
sprintf(v.deutsch, "%-39s\0", "Hallo Welt");
sprintf(v.englisch, "%-39s\0", "Hello world");
v.zaehler = 1;
l.ausgabe(v);
v.deutsch[0] = v.englisch[0] = '*';
v.zaehler++;
l.ausgabe(v);
l.homeg();
struct VOKABEL v2;
for (int i = 0; i <= 2; i++)
{
if (l.eingabe(v2) >= 0)
{
cout << v2.deutsch << "\n";
cout << v2.englisch << "\n";
cout << v2.zaehler << "\n";
}
else
cout << "EOF\n";
}
return 0;
}
Lernen::Lernen()
{
cout << "Lernen::Lernen\n";
f_out.open("v.txt", ios_base::in | ios_base::out| ios_base::trunc);
}
Lernen::~Lernen()
{
cout << "Lernen::~Lernen\n";
f_out.close();
}
void Lernen::ausgabe(struct VOKABEL & v)
{
f_out.write(v.deutsch, 40*sizeof(char));
f_out.write(v.englisch, 40*sizeof(char));
f_out.write((char *)&v.zaehler, sizeof(int));
}
void Lernen::homeg()
{
f_out.seekg(0, ios_base::beg);
}
int Lernen::eingabe(struct VOKABEL & v)
{
f_out.read((char *)v.deutsch, 40*sizeof(char));
f_out.read((char *)v.englisch, 40*sizeof(char));
f_out.read((char *)&v.zaehler, sizeof(int));
return f_out.tellg();
}
Last edited by bst on 09-06-2009 at 00:38 Reason: Nachtrag: Code |
|
|
|
| Sponsored Links | |
![]() |
| Thread Tools | |
| Display Modes | |
|
|