Von stdin in txt Datei schreiben
-
Hallo,
ich bin gerade dabei ein Programm zu schreiben mit dem ich z.B. eine Datei öffnen kann und deren Inhalt in einer neuen txt Datei abspeichern kann. Jetzt versuche ich gerade die ganze Zeit über stdin, sprich ich geb einfach in die konsole ein text ein, in eine datei zu schreiben. Klappt leider nicht wirklich.
Code für eine Datei:
while(1) { // Error message, wrong inputFilename if (file == NULL) { fprintf(stderr, "Wrong inputFilename!\n"); usage(); exit(1); } // get lines of the file fgets (line, MAX_LINE_LENGTH, file); if (feof(file)) break; // terminal output fprintf(outputFile, "%s", line); }
Code für stdin:
while(stdin) { fgets(line, MAX_LINE_LENGTH, stdin); fprintf(outputFile, "%s", line); }
Kann mir vielleicht jemand helfen ?
Grüße,
Krol
-
Erstens hast du dich in der Etage geirrt - C ist eine Ebene höher.
Zweitens: Wie genau äußert sich denn dein Problem, abgesehen davon, daß du das Ende der Nutzdaten nicht feststellen kannt.
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
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ällenMfG 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..