Digital-Inn
 
 

Go Back   Digital-Inn > Office-Welt > C/C++

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 !!!

Reply
 
Thread Tools Display Modes
Old 06-06-2009   #1
BabCom
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;
};
nun soll hier die Vokabel mit Übersetzung in die struktur geschrieben werden.
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);
};
das is mein Problem hoffe mir kann da einer helfen.

Last edited by BabCom on 06-06-2009 at 15:50
BabCom is offline   Reply With Quote
Sponsored Links
Old 09-06-2009   #2
bst
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;   
};
vokabel.cpp:
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
bst is offline   Reply With Quote
Sponsored Links
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 12:46.


Powered by vBulletin® Version 3.7.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 2.4.0
Template-Modifikationen durch TMS
Advertisement System V2.5 By   Branden
Copyright by NightwoLF & Jesse69