![]() |
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; |
Also ich fänds ja ned schlecht, wenn ich die Funktionsweise der Unterprogramme kennen würde ;)
|
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. |
Ich bzw. mein VS kann irgendwie mit dem ifstream nix anfangen, von was ist das abgeleitet bzw. welche includes werden dafür verwendet ?
|
ifstream ist ein reiner input file stream aus fstream. Was soll VS abkürzen?
|
Hmm, wenn du
Code:
if(Eingabe.get(zeichen) != 0) 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 ;) |
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:
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. |
Wieso sollte Microsoft mir die Fragen beantworten? Es gibt eine logische Grundstruktur hinter der Schleife.
|
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. |
Zitat:
Code:
#include <io.h> Die MSDN sagt zu feof() folgendes Zitat:
|
:bang: After, nicht at.
Naja. Blöde Fehler, auch gedanklich, gehören einfach dazu ;) Danke noch mal. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:11 Uhr. |
Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.