Wo liegt der Fehler?
-
Ich habe diese Funktion geschrieben.
Sie soll den Namen und Alter von einer Datei einlesen und in einer Variable
speichern. Die Datei sieht z.B. so aus:Name-Alter.
Der Bindestriche bzw. Punkt sollen anzeigen, wo sich das letzte Zeichen vom Namen bzw. Alter befinden. Ich habe zusätzlich eine Schleife, die beendet werden soll, wenn das Dateiende erreicht ist. Das Problem ist, dass die Schleife immer weiterläuft.
Wo kann der Fehler liegen?Hier ist der C++ Quellcode meiner Funktion:
void Oeffnen_Eintrag()
{
ifstream datei_eingabe("C:datei.txt");while(!datei_eingabe.eof())
{
for(i=1;dat_zeichen!='-';i++)
{
datei_eingabe >> dat_zeichen;
name_kopie += dat_zeichen;
name_laenge++;
if(datei_eingabe.eof()) break;
}
for(i=1;dat_zeichen!='.';i++)
{
datei_eingabe >> dat_zeichen;
alter_kopie += dat_zeichen;
alter_laenge++;
}
}
}
-
("C:datei.txt");
nicht dein ernst oder?
//edit: nutze lieber getline und übergib die werte an einen stringstream
-
Du musst doch erstmal prüfen, ob deine Datei überhaupt geöffnet werden konnte!
Das bezweifel ich nämlich.Versuch mal "c:\\Datei.txt" .
-
Das mit der Datei habe ich ausversehen nur hier in Forum falsch geschrieben.
Im Programm stimmt es. Die Datei wird dort auch geöffnet.
-
for(i=1;dat_zeichen!='-';i++) { datei_eingabe >> dat_zeichen; name_kopie += dat_zeichen; name_laenge++; if(datei_eingabe.eof()) break; } for(i=1;dat_zeichen!='.';i++) { datei_eingabe >> dat_zeichen; alter_kopie += dat_zeichen; alter_laenge++; } }
1. Warum benutzt du hier for Schliefen, i wird doch gar nicht gebraucht???
2. Benutze wie schon gesagt
"C:\\Daten.txt"
3. Wenn du einen Code postest kannst du ihn markieren und unten auf einen kleinen Button mit der Azufschrift C/C++ drüpcken, dann wird das ganze übersichtlicher....
4. um ein einzelnes Zeichen zu bekommen verwende biite etwas in der Art:
[cpp]
ifstream datei;
datei.open("C:\\Daten.txt, ios_base::in);char zeichen;
while( !datei.eof() )
{
datei.get(zeichen);
//....
}
//...
[/cpp]Gruß eXitus *edit: :p :edit*
-
Ich möchte nur wissen wieso die while-Schleife nicht beendet wird,
obwohl das Deteiende erreicht ist.
-
while(!datei_eingabe.eof()) { for(i=1;dat_zeichen!='-';i++) { datei_eingabe >> dat_zeichen; name_kopie += dat_zeichen; name_laenge++; if(datei_eingabe.eof()) break; // ------- } // | for(i=1;dat_zeichen!='.';i++) // <------ hier gehts weiter { datei_eingabe >> dat_zeichen; alter_kopie += dat_zeichen; alter_laenge++; } }
wenn das dateiende erreicht ist, schlägt das lesen mittels >> nat. fehl, somit wird auch die schleifenbedingung stets erfüllt sein.
-
-
Also, ich habe die Funktion getestet (ein bisschen umgeschrieben), und sie funktioniert einwandfrei....
//datei.txt hat folgenden Inhalt: //Alles-Gut. (enter) //Oder-Nicht. (enter) //Alter-Name. (enter) //----------------------------------------------- #include <iostream> #include <fstream> using namespace std; void Oeffnen_Eintrag() { ifstream datei_eingabe("C:\\datei.txt"); char dat_zeichen; char* name_kopie; char* name_laenge, alter_kopie, alter_laenge; while(!datei_eingabe.eof()) { for(int i=1;dat_zeichen!='-';i++) { datei_eingabe >> dat_zeichen; cout << dat_zeichen; name_kopie += dat_zeichen; name_laenge++; if(datei_eingabe.eof()) break; } for(i=1;dat_zeichen!='.';i++) { datei_eingabe >> dat_zeichen; cout << dat_zeichen; alter_kopie += dat_zeichen; alter_laenge++; } cout << endl; } } int main() { Oeffnen_Eintrag(); return 0; } // Output: //Alles-Gut. //Oder-Nicht. //Alter-Name. //.
Gruß eXitus
-
edit: gelöscht