Fehler Durchsuchen einer Datei, Funktioniert jedes 2. Mal(Anfänger)

Status
Für weitere Antworten geschlossen.

CoolerFreak

Well-known member
Fehler Durchsuchen einer Datei, Funktioniert jedes 2. Mal(Anfänger)

Hallo alle zusammen.
Ich bastel im Moment an einer Datenbank. Sie ist möglichst simpel aufgebaut, da meine Kenntnisse in C++ sehr eingeschränkt sind und ich neu auf diesem Gebiet bin. Der Code funktioniert einigermaßen (schlecht^^). Jedoch gibt er mir beim Anfragen immer nur jedes zweite Mal eine korrekte Antwort. Dies müsste doch eigentlich nicht möglich sein, da ich das Abfragen als Funktion ausgelagert habe und er jedes Mal die Datei neu öffnet? Was habe ich falsch gemacht?

Würde mich über jede Hilfe freuen

lg CoolerFreak

Achso:
Dateiaufbau ist folgender:
Anzahl der Datenpaare
"Test" "TestInfo" "Test1" "Test1Info"...

main.cpp:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include "funktionen.h"
using namespace std;

int main()
{
cout << "Database 1.0" << endl << "By ***" << endl;
anzeigen();
while(1)
{
suche();
}
}

funktionen.h:
Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int anzeigen(void)
{
		ifstream dat_ein;
ofstream dat_aus;
int anzahl;
char zeichen;
string dateiname = "data.txt";
int loop;
string suche;

dat_ein.open(dateiname.c_str(), ios_base::in); //offnen der Datei
if(!dat_ein)
{
	cout << "Datenbank konnte nicht geoeffnet werden" << endl;
	return -1;
}
dat_ein >> anzahl; //Anzahl der Datenpaare einer Datei einlesen
string name[anzahl]; //Arrays zu jedem Paar erstellen
string beschr[anzahl];
suche = "Test";

loop = 0;
suche = "Test";
while(loop < anzahl) //Solange Solange noch Datenpaare noch nicht eingelesen wurden
{ 
	while(zeichen != '\"')
	{
		dat_ein.get(zeichen); //Bis zum ersten Datenwert einlesen
	}
	dat_ein.get(zeichen); //Das " uberspringen
	while(zeichen != '\"') // Bis zum nächsten " Einlesen
	{
		
		name[loop] += zeichen; // in den zugehörigen Array einspeichern
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen); //Das " uberspringen
	
	while(zeichen != '\"') //Bis zum nächsten " einlesen
	{
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen); // Das " uberspringen
	while(zeichen != '\"')
	{
		
		beschr[loop] += zeichen; // in den zugehörigen Array einspeichern
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen);
	cout << name[loop] << ";" << beschr[loop] << endl; //Die eingelesen Werte ausgeben
	++loop;
}
dat_ein.close();
return 0;
}


int suche (void)
{
	ifstream dat_ein;
ofstream dat_aus;
int anzahl;
char zeichen;
string dateiname = "data.txt";
int loop;
string suche;

dat_ein.open(dateiname.c_str(), ios_base::in); //offnen der Datei
if(!dat_ein)
{
	cout << "Datenbank konnte nicht geoeffnet werden" << endl;
	return -1;
}
dat_ein >> anzahl;
string name[anzahl];
string beschr[anzahl];
suche = "Test";

loop = 0;
suche = "Test";
while(loop < anzahl)
{ 
	while(zeichen != '\"')
	{
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen);
	while(zeichen != '\"')
	{
		
		name[loop] += zeichen;
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen);
	
	while(zeichen != '\"')
	{
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen);
	while(zeichen != '\"')
	{
		
		beschr[loop] += zeichen;
		dat_ein.get(zeichen);
	}
	dat_ein.get(zeichen);
	++loop;
}
dat_ein.close();
cout << "Zu suchendes Objekt eingeben: "; //Suchbegriff einlesen
cin >> suche;
loop = 0;

while(loop < anzahl) //Alle Datenpaare uberprufen
{
	if(name[loop] == suche)  //Vergleichen
	{
		
		cout << endl << beschr[loop] << endl; //richtigen Wert ausgeben
		break;
	}
	++loop;
}

return 0;
}
 
Also ohne jetzt gross den Code zu analysieren
1) anzeigen () liefert eine Wert zurück, den Du aber in main.cpp nicht abfragst... --> Programm läuft auch bei Fehler weiter...
2) while (1) --> Endlosschleife --> Wenn es Dir gefällt...
3) Auch suche () liefert einen Wert der nicht abgefragt wird...
4) Welcher Compiler ? Hat der eine Debug-Funktion ? Wenn nicht, mach einfach mal mehrere cout auf die Inhalte z.B anzahl usw...
 
Danke erst einmal für den Tipp.
Ich benutze MinGWStudios, der verfügt über eine Debug-Funktion. Ich werde das gleich einmal überprüfen. Obwohl ich nichts am suchen oder anzeigen-Code verändert habe läuft das Programm jetzt. Ich habe einfach in main()
Code:
while(1)
	{
	cout << "Alle anzeigen\t\t<1>" << endl << "Durchsuchen\t\t<2>" << endl << "Neuer Datensatz\t\t<3>" << endl << "Benutzername aendern\t<4>" << endl << 
	"Hilfe\t\t\t<5>"<<endl;
	cin >> eingabe;
	switch(eingabe)
	{
	case 1:
		anzeigen();
		break;
	case 2:
		suche();
		break;
	case 3:
		neu();
		break;
	case 4:
		regini();
		break;
	case 5:
		readme();
		break;
	}
	}
stehen. Trotzdem verstehe ich das nicht. Achso habe noch ein paar andere Funktionen eingebaut.
Ich suche weiter nach dem Fehler.
Danke für die HIlfe

CoolerFreak
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten