Anfänger Code

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anfänger Code

    Habe ein Übungsskript aus meinem C++ Buch.
    Korrekt abgetippt, trotzdem Fehlöermeldung

    Quellcode

    1. #include<cstdlib>
    2. #include<fstream>
    3. #include<string>
    4. #include<iostream>
    5. using namespace std;
    6. int main () {
    7. ifstream Quelle;
    8. string Quelldateiname;
    9. cout << "Quelldatei? ";
    10. cin >> Quelldateiname;
    11. Quelle.open(Quelldateiname.c_str(), ios::binary|ios::int);
    12. if (!Quelle) {
    13. cerr << Quelldateiname << " kann nicht geöffnet werden!\n";
    14. exit (-1);
    15. }
    16. string Zieldateiname;
    17. cout << "Zieldatei? ";
    18. cin >> Zieldateiname;
    19. ofstream Ziel(Zieldateiname.cstr(), ios::out);
    20. if (!Ziel) {
    21. cerr << Zieldateiname << " kann nicht geöffnet werden!\n";
    22. exit (-1);
    23. }
    24. char ch;
    25. while (Quelle.get(ch)) {
    26. Ziel.put(ch);
    27. }
    28. }
    Alles anzeigen



    Also mein Dev-C++ zeigt Fehler in der Zeile wo
    folgendes steht:

    Code:

    Quelle.open(Quelldateiname.c_str(), ios::binary|ios::int);



    Sollte ein Programm werden, das ein File kopiert, und genau bei
    .c_str() bin ich im Praxisbuch noch nicht. ^^"
    Möchte mir vll trotzdem jemand helfen?

    Edit: Problem gelöst!
  • Neues Problem.

    Quellcode

    1. #include<cstdlib>
    2. #include<fstream>
    3. #include<string>
    4. #include<iostream>
    5. #include<string>
    6. using namespace std;
    7. int main () {
    8. ifstream Quelle;
    9. string Quelldateiname;
    10. cout << "Quelldatei? ";
    11. cin >> Quelldateiname;
    12. Quelle.open(Quelldateiname.c_str(), ios::binary|ios::in);
    13. if (!Quelle) {
    14. cerr << Quelldateiname << " kann nicht geöffnet werden!\n";
    15. exit (-1);
    16. }
    17. string Zieldateiname;
    18. cout << "Zieldatei? ";
    19. cin >> Zieldateiname;
    20. cout << "Wieviele Kopien sollen erstellt werden?";
    21. int Menge;
    22. cin >> Menge;
    23. for (int run = 1; run <= Menge; run++) {
    24. string acName = Zieldateiname+"_"+static_cast<char>(run);
    25. ofstream Ziel(acName.c_str(), ios::out);
    26. if (!Ziel) {
    27. cerr << acName << " kann nicht geöffnet werden!\n";
    28. exit (-1);
    29. }
    30. char ch;
    31. while (Quelle.get(ch)) {
    32. Ziel.put(ch);
    33. }
    34. }
    35. }
    Alles anzeigen


    Man kann eingeben wieviele Kopien das Programm macht, scheint
    nach Eingabe einer Zahl nur abzubrechen.
    Was mache ich falsch?
  • Hallo,

    ich hab mal deinen Code bisschen zurecht gerückt und nun müssts funktionieren:

    Quellcode

    1. #include<cstdlib>
    2. #include<fstream>
    3. #include<string>
    4. #include<sstream>
    5. #include<iostream>
    6. using namespace std;
    7. int main () {
    8. ifstream Quelle;
    9. ofstream Ziel;
    10. string Quelldateiname, Zieldateiname, acName;
    11. stringstream temp;
    12. int Menge;
    13. char ch;
    14. cout << "Quelldatei? ";
    15. cin >> Quelldateiname;
    16. Quelle.open(Quelldateiname.c_str(), ios::binary|ios::in);
    17. if (!Quelle)
    18. {
    19. cerr << Quelldateiname << " kann nicht geöffnet werden!\n";
    20. exit (-1);
    21. }
    22. cout << "Zieldatei? ";
    23. cin >> Zieldateiname;
    24. cout << "Wieviele Kopien sollen erstellt werden? ";
    25. cin >> Menge;
    26. for (int run = 1; run <= Menge; run++)
    27. {
    28. temp << run << ends;
    29. acName = Zieldateiname + "_" + temp.str();
    30. temp.str("");
    31. Ziel.open(acName.c_str(), ios::out);
    32. if (!Ziel.good())
    33. {
    34. cerr << acName << " kann nicht geöffnet werden!\n";
    35. exit (-1);
    36. }
    37. Quelle.clear();
    38. Quelle.seekg(0,ios::beg);
    39. while (Quelle.get(ch))
    40. {
    41. Ziel.put(ch);
    42. }
    43. Ziel.close();
    44. }
    45. }
    Alles anzeigen


    1. Der Cast von int nach string ist nicht so einfach. Um den Dateinamen zu inkrementieren habe ich mal nen stringstream genommen. (4, 12, 30, 31, 32)

    2. Du liest die Datei zeichenweise ein, deswegen wird der Dateipointer jeweils ein Zeichen weitergeschickt. Wenn der Dateipointer am EOF is, kannst du nicht nochmal versuchen die Datei bis zum Ende auszulesen. Also Dateipointer an den Anfang (39, 40)

    3. Achte bitte mehr auf die Lesbarkeit des Codes. Deklarationen gehören in der Regel oben hin (nicht in eine Schleife!), Variablennamen besser wählen, etc.

    4. Ich habe kaum was verbessert. Nur lauffähig gemacht.