Brauche Hilfe: Misteriöses "Es"



  • #include <iostream>
    #include <fstream>
    using namespace std; 
    
    int main() {
    	ifstream Data;
    
    	ifstream File("TextFile2.txt");
    	string a;
    		File >> a;
    	File.close();
    	cout << a << "\n";
    	cout << "Hi";
            
            return 0;
    
    
    
    }
    

    Immer wen ich diesen Code ausführe Wird: Es
    ........................................................................ Hi
    (Die Punkte natürlich nicht) ausgespukt.
    Ich weis nicht was los ist kann übrigens auch nichts reinschreiben.
    Wird ein dummer fehler sein(mache das noch nicht so lange).
    Danke



  • @Rathead Der eigentliche Inhalt der Textdatei ist übrigens "Nick"
    und das ifstream Data; hat keine bedeutung und ist inzwischen entfernt das "Es" ist immer noch da.



  • Bist du sicher dass du das Programm mit dem richtigen Working-Directory startest? Vielleicht hast du in einem anderen Verzeichnis eine Datei mit dem selben Namen wo "Es" drin steht... (bzw. "Es" gefolgt von einem Leerzeichen/Tab/Zeilenumbruch und evtl. noch mehr dahinter).

    Tip falls du Visual Studio verwendest: wenn du das Programm aus Visual Studio startest, dann ist das Working-Directory per Default das Verzeichnis wo das .vcxproj File liegt, nicht das Verzeichnis wo die .exe liegt. Mit anderen IDEs fehlt mir die Erfahrung, würde mich aber nicht wundern wenn es da ähnlich wäre.

    Versuch einfach mal das Programm über eine Shell zu starten (cmd.exe, bash - was auch immer du verwendest), im richtigen Verzeichnis.

    ps: Wenn du Output von einem Programm zeigen willst, nimm einfach einen Code-Block mit Typ "text", ala

    Es
    Hi
    

    Dann musst du nicht beschreiben was dauzgehört und was nicht.



  • Nimm doch zum Test mal eine andere Textdatei, oder gib einen gezielten Ordner an ( z.B. "D:/projects/testdatei_foobar.dat")
    Oder um sicherzugehen, dass es wirklich der Inhalt von "a" ist und nicht etwas anderes, ändere deine Ausgabe z.B. so:

    cout << "####" <<  a << "###\n";
    

    Dann weißt du genau, wenn du die Rauten siehst, dass dazwischen der Inhalt deiner Variable ist. Das empfiehlt sich insbesondere dann, wenn man nicht die möglichkeit hat, mit dem Debugger zu arbeiten und die Console schon sehr stark frequentiert wird, sprich unübersichtlich ist.



  • Danke probier ich



  • @hustbaer Ist auch bei anderen Dateien so Bei D Dateien die nicht exestieren sieht es so aus

    
    Hi
    

    An der Datei liegt es also nicht.



  • Ist die Text-Datei evtl. insgeheim irgendwas anderes als ASCII? UTF-8 oder anderes?
    Der klassische STL-String ist nämlich nur für 8-Bit-Zeichen ausgelegt.



  • @Rathead sagte in Brauche Hilfe: Misteriöses "Es":

    @hustbaer Ist auch bei anderen Dateien so

    Glaub ich nicht

    Bei D Dateien die nicht exestieren sieht es so aus

    
    Hi
    

    An der Datei liegt es also nicht.

    Und was genau wundert dich jetzt daran? Die Datei existiert nicht -> er liest nix -> kein "Es" in der 1. Zeile. Und die zweite Zeile mit "Hi" kommt ja nicht aus der Datei.



  • #include <iostreams>
    #include <cstdlib>
    
    // ...
    
    if (!File) {
        std::cerr << "couldn't open file :((\n\n";
        return EXIT_FAILURE;
    }
    


  • @It0101 sagte in Brauche Hilfe: Misteriöses "Es":

    Ist die Text-Datei evtl. insgeheim irgendwas anderes als ASCII? UTF-8 oder anderes?
    Der klassische STL-String ist nämlich nur für 8-Bit-Zeichen ausgelegt.

    UTF-8 sollte hier keine Probleme machen, das lässt sich mit einem std::string handhaben. Was aber eventuell sein könnte, ist dass die Datei ein BOM (Byte Order Mark) hat. Ich weiss nicht wie das aussieht, wenn man es einfach so auf der Konsole ausspuckt, aber das könnte eine mögliche Erklärung sein.

    Edit: Ne, nicht wirklich glaube ich. Zumindest in der Standard Windows-Konsole auf einem deutschen System sieht das UTF-8 BOM (EF BB BF) so aus:

    ´╗┐
    

Anmelden zum Antworten