CommNews Forum Home  

Zurück   CnC Foren > Verschiedenes > Tech-Support / Tech-Talk

Antworten
 
Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 01-09-2007, 13:40
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
C++ Dateiausgabe

Wahrscheinlich ein lächerlicher Fehler, aber ich finde ihn nicht. Warum gibt mein Code das letzte Zeichen einer Datei doppelt aus?

Code:
ifstream Eingabe;

Eingabe.open(Datei.c_str(), ios_base::in);

cout << "\nGebe Datei aus: \n";

char zeichen;

while (!Eingabe.eof())
{
        Eingabe.get(zeichen);
	cout << zeichen;
}

Eingabe.close();
cout << endl;
Ich habe übrigens ein Buch gekauft (äusserst preiswert, da Mangelexemplar), in der Hoffnung, daraus ordentliches C++ zu lernen. Ich hab die ersten 326 Seiten übersprungen, weil ich das alles schon wusste, und landete sofort im Anhang. Der Code oben ist fast 1 zu 1 abgeschrieben, nur die Variablen habe ich anders gewählt (und en bissken getrimmt...). Kann ich also von abraten
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #2  
Alt 01-09-2007, 17:02
Benutzerbild von Bernd_XP
Bernd_XP Bernd_XP ist offline
MARV-Fahrer

 
Registriert seit: Jun 2002
Ort: Augusta Vindelicorum
Beiträge: 7.432
Bernd_XP hat noch keine Bewertung oder ist auf 0
Bernd_XP eine Nachricht über ICQ schicken
OL Nick: Be.XPerimental
Style: Dune
Also ich fänds ja ned schlecht, wenn ich die Funktionsweise der Unterprogramme kennen würde
__________________

Nach der GetBoinked5 von [Unbekannt]: "Ich hab aus Gewohnheit und Versehen zu meiner Freundin gesagt: Thekenschlampe bring mir noch n Bier"
Mit Zitat antworten
  #3  
Alt 01-09-2007, 21:30
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
Definiere "Unterprogramm". Das ist schon alles. Eigentlich fehlt nur die Deklaration von "Datei" (ist ein String, der den Dateinamen enthält) und der Rest des Programms ist dafür nicht relevant, weil auf nichts darin noch einmal referenziert wird.

Übrigens, mal prophylaktisch: Ich weiss, dass man das auch anders ausgeben kann, habs im Endeffekt auch über cout gemacht, aber ich würde gerne wissen, warum der oben stehende Code nicht funktioniert, wei er soll.
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #4  
Alt 02-09-2007, 16:24
Benutzerbild von Gonzo
Gonzo Gonzo ist offline
Cabal

 
Registriert seit: Dec 2002
Ort: Berlin
Beiträge: 2.476
Gonzo hat noch keine Bewertung oder ist auf 0
Style: USA
Ich bzw. mein VS kann irgendwie mit dem ifstream nix anfangen, von was ist das abgeleitet bzw. welche includes werden dafür verwendet ?
__________________


MfG Gonzo
Mit Zitat antworten
  #5  
Alt 02-09-2007, 16:45
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
ifstream ist ein reiner input file stream aus fstream. Was soll VS abkürzen?
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #6  
Alt 02-09-2007, 21:03
Benutzerbild von Gonzo
Gonzo Gonzo ist offline
Cabal

 
Registriert seit: Dec 2002
Ort: Berlin
Beiträge: 2.476
Gonzo hat noch keine Bewertung oder ist auf 0
Style: USA
Hmm, wenn du
Code:
		if(Eingabe.get(zeichen) != 0)
			cout << zeichen;
verwendest funktioniert es
Warum es mit nur while nicht funzt, kann ich nicht wirklich erklären, vermute nur dass die Datei nach dem Lesen des letzten Zeichens halt noch nicht eof ist, sondern erst eines später, deshalb wird das letzte Zeichen doppelt ausgegeben ( get schlägt fehl und zeichen bleibt unverändert ).
VS = Visual Studio
__________________


MfG Gonzo
Mit Zitat antworten
  #7  
Alt 02-09-2007, 22:13
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
Ah ja, Visual Studio C++ benutze ich auch

Ich weiss, dass es mehrere Wege gibt, das auszugeben, ich weiss nur nicht, warum dieser eine hier nicht funktioniert. Was ja eigentlich passieren müsste: While-Abfrage -> nicht Ende der Datei -> Kopieren und Ausgabe -> Wiederhole... -> While-Abfrage -> Letztes Zeichen=Nicht Ende -> Kopieren und Ausgabe -> While-Abfrage -> Ende der Datei -> Rest von While wird übersprungen.

Ganz offensichtlich läuft dat so nicht. Die Frage ist jetzt: Warum nicht?
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #8  
Alt 04-09-2007, 17:31
Benutzerbild von Gonzo
Gonzo Gonzo ist offline
Cabal

 
Registriert seit: Dec 2002
Ort: Berlin
Beiträge: 2.476
Gonzo hat noch keine Bewertung oder ist auf 0
Style: USA
Zitat:
Zitat von Der_Mosch Beitrag anzeigen
Ganz offensichtlich läuft dat so nicht. Die Frage ist jetzt: Warum nicht?
lol, anscheinend fängst du wirklich erst an c++ zu lernen, die einzigen die dir solche Fragen beantworten könnten sind die von M$, naja, zumindestens wirst du dir solche Fragen in deiner Laufbahn noch des öfteren stellen.
Einfach die Lösung akzeptieren, über M$ fluchen, Mund abwischen und weitermachen
Ach ja, ich persönlich finde c++ zum würgen, viel zu kompliziert, ich bevorzuge eindeutig das klassische c, und wenn man sich an dem Framework nicht stört ist c# die deutlich einfachere objektorientierte Variante
Komplilieren tue ich den c-code übrigens immer als c++-code, das lässt einem alle Möglichkeiten offen falls man mal eine Problemlösung nur als c++ findet.
__________________


MfG Gonzo
Mit Zitat antworten
  #9  
Alt 05-09-2007, 18:28
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
Wieso sollte Microsoft mir die Fragen beantworten? Es gibt eine logische Grundstruktur hinter der Schleife.
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #10  
Alt 06-09-2007, 08:30
Benutzerbild von LordMordred
LordMordred LordMordred ist offline
A.a.D.

 
Registriert seit: May 2001
Ort: Heimat der Hülsenfrüchte
Beiträge: 7.889
LordMordred hat noch keine Bewertung oder ist auf 0
OL Nick: LoMordred
Das stimmt, doch die Frage ist, wann EOF wirklich zurückgegeben wird bzw. erkannt wird.
Aber wie das in C++ genau ist, kann ich dir leider nicht sagen, da ich mich entweder mit C oder mit C# verständige.
__________________

_______________________________________________________________

"Ich kann freilich nicht sagen, ob es besser werden wird, wenn es anders wird; aber soviel kann ich sagen: es muß anders werden, wenn es gut werden soll."(Georg Christoph Lichtenberg *1742 †1799)
"Demokratie ist die Notwendigkeit, sich gelegentlich den Ansichten anderer Leute zu beugen." (Winston Churchill *1874 †1965)
"Zwei Monologe, die sich gegenseitig immer und immer wieder störend unterbrechen, nennt man eine Diskussion." (Charles Tschopp *1899 †1982)
Mit Zitat antworten
  #11  
Alt 06-09-2007, 18:25
Benutzerbild von Gonzo
Gonzo Gonzo ist offline
Cabal

 
Registriert seit: Dec 2002
Ort: Berlin
Beiträge: 2.476
Gonzo hat noch keine Bewertung oder ist auf 0
Style: USA
Zitat:
Zitat von Der_Mosch Beitrag anzeigen
Wieso sollte Microsoft mir die Fragen beantworten? Es gibt eine logische Grundstruktur hinter der Schleife.
Weil Microsoft die Library und somit auch eof programmiert hat ? Wobei interessant wäre wie sich Linux hier verhält.
Code:
#include <io.h>
#include <stdio.h>

int main()
{
	FILE	*file;
	char	ch;

	if(!(file = fopen("c:\\test.txt", "rb"))) 
	{
        printf("Unable to open file\n");
		return 1;
    }
	while(!feof(file))
	{
		ch = (char)fgetc(file);
		printf("%c", ch);
	}
	fclose(file);
	getchar();
	return 0;
}
Selbst diese Standard-C Version funzt nicht einwandfrei, es wird ein zusätzliches Leerzeichen ausgegeben, der Code sollte eigentlch Linux-Kompatibel sein, falls das also mal jemand testen will ob es sich dort ebenso verhält.
Die MSDN sagt zu feof() folgendes
Zitat:
The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.
Also ist dieses Verhalten wohl beabsichtigt und man MUSS den Rückgabewert der get-Funktion auswerten falls einem die 0 ( Leerzeichen ) am Ende stört.
__________________


MfG Gonzo
Mit Zitat antworten
  #12  
Alt 06-09-2007, 20:00
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.505
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
After, nicht at.
Naja. Blöde Fehler, auch gedanklich, gehören einfach dazu Danke noch mal.
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
Antworten

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:53 Uhr.


Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template-Modifikationen durch TMS

Affiliates
United Forum GetBoinKeD cnc.onlinewelten.de