Von stdin in txt Datei schreiben



  • Das Problem ist das in der Datei dann nichts drin steht. Wenn ich anstelle einer txt Datei, sdtout als Ausgabe verwende funktioniert es.



  • Benutz doch einfach die C++ Filestreams 😉
    Text aus der Konsole in eine Datei schreiben geht zum Beispiel so:

    #include <iostream> // Für std::cin
    #include <fstream> // Für std::ofstream
    #include <iterator> // Für std::istream/ostream_iterator
    #include <algorithm> // Für std::copy
    
    int main()
    {
        std::ofstream file("file.txt");
        std::copy(std::istream_iterator<char>(std::cin), std::istream_iterator<char>(), std::ostream_iterator<char>(file));
    }
    

    Edit: Zu langsam, C.



  • int main(int argc, char *argv[])
    {
      char buf[0x100] = {0};
      FILE *file;
      if (argc < 2)
        return -1;
      file = fopen(argv[1], "wt");
      if (!file)
        return -1;
      while (strcmp(buf, "exit\n") != 0)
      {
        fgets(buf, sizeof(buf), stdin);
        fputs(buf, file);
      }
      fclose(file);
      return 0;
    }
    


  • Wenn ich den Code verwende kommt bei mir immer Speicherzugriffsfehler.



  • Sorry, habe peinlicherweise noch debug Zeugs angehabt, probiers jetzt noch mal. (Code oben editiert.)



  • Hm, funktioniert net 😕



  • Krol schrieb:

    Hm, funktioniert net 😕

    Was genau funktioniert denn nicht? Immernoch der gleiche Fehler? Kompilierst du wirklich genau diesen Code?



  • Copy&Paste 😃
    Oh man, ein wenig mitdenken sollte die Fraktion schon.
    Schaut mal den Code eurer "Hallo World" und vergleicht das mit den hier gezeigten Quelltexten 👍
    Das ist das übliche Missverständnis in diesen Fällen 😉

    MfG f.-th.



  • Das Problem ist das ich string.h nicht benutzen darf.



  • Es geht dir doch nur um strcmp, oder? Das ist recht schnell selber geschrieben:

    int mystrcmp(const char* p1, const char* p2)
    {
    	while(*p1 && *p2 && *p1==*p2) {
    		++p1;
    		++p2;
    	}
    	return *p1-*p2;
    }
    

    Wenn dir das zu frickelig aussieht, kannst du auch die Längen der Zeichenketten bestimmen (würde eine seperate Funktion mystrlen bedeuten),und das Ganze in eine for-Schleife packen, in der dann die einzelnen Zeichen verglichen werden.
    Edit: Ein paar Wörter können so nicht stehen bleiben...
    Edit2: Argh, durchstreichen reicht nicht..


Anmelden zum Antworten