Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

1

24.01.2010, 13:12

Aufgabe 3.Kapitel 1 Problem->Unzipper

Hey,

tut mir leid aber ich bin langsam so verzweifelt, dass cih noch einen Thread aufmachen muss.

Die Aufgabe lautet man soll einen kleinen Unzipper basteln, dass die Methode tbSaveToFile verwendet um aus einen eingegebenen Archiv eine virtuelle datei zu erstellen und dann eine echte.

Ich habe mir ein ZIP Archiv angelegt und dort die Log.html reingepackt(alles in dem ordner wo auch die exe liegt).

Hier erstmal der Code(vllt. nicht die Beste herangehensweise aber besser konnte ichs net:)):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <Tribase.h>


using namespace std;

int main()
{
    tbInit();
    

    //Abfrage

    cout<<"Waehlen Sie eine der drei optionen!\n"<<endl;
    int iEingabe = 0;
    if(iEingabe < 1 || iEingabe > 3)
    {
    cout<<"1.Datei aus Archiv(ohne Passwort)"<<endl;
    cout<<"2.Archiv mit Passwort"<<endl;
    cout<<"3.Archiv mit Verschlusseltem Passwort"<<endl;
    cout<<"------------------------------------------\n\n";
    cin>>iEingabe;
    };
        
    //virtuelle datei erstellen

    tbVFile* pFile1 = new tbVFile;
    switch(iEingabe)
    {
    case 1:
        cout<<"(Muster: Datei.dat@ZIPARCHIV.zip): "<<endl;
        char cEingabe;
        cin>>cEingabe;
        char *pcEingabe = (char*)cEingabe;
        pFile1->Init(pcEingabe);
        pFile1->SaveToFile("Datei.dat");
        TB_SAFE_DELETE(pFile1);
        break;
    
    
    
    }

    
    tbExit();

}                 


Es kommen keine fehler und Warnungen beim Kompilieren.
Das programm funktioniert auch wie es soll nur aber es läuft dann nicht mehr weiter.Sobald man die datei und das Archiv angibt kommt dann wieder diese Meldung von Windows:

(Link)



Ich bin langsam am verzweifeln, da es ja schon an den leichten Aufgaben scheitert.
Kann es sein, dass was mit den dateitypen falsch ist?Aber eine andere Möglichkeit es zu machen sehe ich nicht.

Ich hatte schonmal das problem gestern bei einer anderen Aufgabe, siehe diesen Thread hier:
http://spieleprogrammierer.de/phpBB2/viewtopic.php?t=13092


Wie gesagt tut mir Leid aber ich komme wirklich nicht weiter, wenn es im Code einen fehler gäbe, dann wäre es was anderes aber so.ich verstehe einfach nicht wo das problem ist.

Danke schonmal im Voraus und hoffe auf schnelle Hilfe.
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

2

24.01.2010, 13:15

Wo genau unterbircht denn der Debugger ?
Was ich mir vorstellen könnte gibt es probleme beim einlesen des Textes,

C-/C++-Quelltext

1
2
3
        char cEingabe;
        cin>>cEingabe;
        char *pcEingabe = (char*)cEingabe;

Kommt mir komisch vor.

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

3

24.01.2010, 13:22

Zitat von »"E122"«

Wo genau unterbircht denn der Debugger ?
Was ich mir vorstellen könnte gibt es probleme beim einlesen des Textes,

C-/C++-Quelltext

1
2
3
        char cEingabe;
        cin>>cEingabe;
        char *pcEingabe = (char*)cEingabe;

Kommt mir komisch vor.


Nun man könnte theretisch es auch so machen:

C-/C++-Quelltext

1
2
char *pcEingabe;
cin>>pcEingabe;


Aber was ändern tuts denke cih nciht.Wie würdest du es den sonst machen?
Ich meine die Funktionen wollen immer char* haben und anderen Dateityp zu übergeben wäre ja schlecht oder gibts da ne ander methode für?

Sorry aber könntest du es für mich debuggen, ich kenne mich da nämlich noch nicht wirklch aus und noch nie benutzt.

Und ich könnte mir denken, dasses daran liegt, da ich im anderen programm(Link im Thread) auch ähnlich handeln musste wegen den dateitypen und es dort auch dann diesen "Fehler" gab aber anders wüsst ich nicht wie ich es machen könnte.

Danke für deine Antwort:)
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

4

24.01.2010, 13:32

Zitat

Sorry aber könntest du es für mich debuggen, ich kenne mich da nämlich noch nicht wirklch aus und noch nie benutzt.


Dann solltest dich schleunigst dran gewöne ;)
Ohne Debugger kommst du in grösseren anwendungen nicht weit, auf der Fehlersuche ;)

Ich würd den Input so machen

C-/C++-Quelltext

1
2
3
4
char Eingabe[256];
cin.get (&Eingabe[0], 256);

char* pcEingabe = &Eingabe[0];


PS: Im buch kommt im 1. Kapitel noch was über den Debugger

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

5

24.01.2010, 13:39

Zitat von »"E122"«

Zitat

Sorry aber könntest du es für mich debuggen, ich kenne mich da nämlich noch nicht wirklch aus und noch nie benutzt.


Dann solltest dich schleunigst dran gewöne ;)
Ohne Debugger kommst du in grösseren anwendungen nicht weit, auf der Fehlersuche ;)

Ich würd den Input so machen

C-/C++-Quelltext

1
2
3
4
char Eingabe[256];
cin.get (&Eingabe[0], 256);

char* pcEingabe = &Eingabe[0];


PS: Im buch kommt im 1. Kapitel noch was über den Debugger


Ok, also erstmal zum debugger: Der fehler kommt halt beim cin.Da wo ich in einen char* Pointer die Eingabe speichern möchte.

Soo dann habe ich mal deinen Code eingefügt:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <Tribase.h>


using namespace std;

int main()
{
    tbInit();
    

    //Abfrage

    cout<<"Waehlen Sie eine der drei optionen!\n"<<endl;
    int iEingabe = 0;
    if(iEingabe < 1 || iEingabe > 3)
    {
    cout<<"1.Datei aus Archiv(ohne Passwort)"<<endl;
    cout<<"2.Archiv mit Passwort"<<endl;
    cout<<"3.Archiv mit Verschlusseltem Passwort"<<endl;
    cout<<"------------------------------------------\n\n";
    cin>>iEingabe;
    };
        
    //virtuelle datei erstellen

    tbVFile* pFile1 = new tbVFile;
    switch(iEingabe)
    {
    case 1:
        cout<<"(Muster: Datei.dat@ZIPARCHIV.zip): "<<endl;
        char Eingabe[256];
        cin.get(&Eingabe[0], 256);
        char* pcEingabe = &Eingabe[0]; 
        pFile1->Init(pcEingabe);
        pFile1->SaveToFile("Datei.dat");
        TB_SAFE_DELETE(pFile1);
        break;
    
    
    
    }

    
    tbExit();

}                                     


das Programm springt genau da raus, wo man den Namen des Archivs eingeben sollte.Nämlich vor/bei cin.get();
Da ich deinen Codeteil nicht genau verstehe kann ich mir nicht genau erklären woran es liegt.
Ne kurze Erklärung wäre nett.
Und vllt. nen Ansatz woran es liegen könnte.


Edit:
ich könnts mir so erklären:

C-/C++-Quelltext

1
2
3
char Eingabe[256];  //Nen Array anlegen 256 "Stelen"

cin.get(&Eingabe[0], 256);  //die Eingabe speichern, beginnend an der 0 Stelle

char* pcEingabe = &Eingabe[0]; 
//Hier wiederum in einen char* konvertieren und wieder ab der 0. Stelle [/cpp]

Könnt es mir nur so erklären.Weiß aber nicht obs so richtig ist und auf ne Idee woran es jetzt leigen könnt bringt es mich auch nicht wirklich.
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

6

24.01.2010, 13:54

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    cin>>iEingabe;
    };
    std::cin.ignore();
    //virtuelle datei erstellen

    tbVFile* pFile1 = new tbVFile;
    switch(iEingabe)
    {
    case 1:
        cout<<"(Muster: Datei.dat@ZIPARCHIV.zip): "<<endl;
        char Eingabe[256];
        cin.get(&Eingabe[0], 256);
       


So klappts mit dem Dateinamen.

Aber im Log steht: "Komprimierte Datei gefunden, dekomprimierung nicht unterstützt" ;) Is ja ne komische Zip-Klasse ;)

EDIT: Stimmt tatsächlich, die tbVFile klasse kann nur unkomprimierte Dateien aus einem Zip archiv lesen. So stehts im buch !

Ach-Und: Das es sich gleich beendet is normal. mach einfach ein std::cin.get() vor das return 0, dann musste nochmal auf enter drücken, bis es sich beendet.

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

7

24.01.2010, 13:59

Zitat von »"E122"«

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    cin>>iEingabe;
    };
    std::cin.ignore();
    //virtuelle datei erstellen

    tbVFile* pFile1 = new tbVFile;
    switch(iEingabe)
    {
    case 1:
        cout<<"(Muster: Datei.dat@ZIPARCHIV.zip): "<<endl;
        char Eingabe[256];
        cin.get(&Eingabe[0], 256);
       


So klappts mit dem Dateinamen.

Aber im Log steht: "Komprimierte Datei gefunden, dekomprimierung nicht unterstützt" ;) Is ja ne komische Zip-Klasse ;)


Ach-Und: Das es sich gleich beendet is normal. mach einfach ein std::cin.get() vor das return 0, dann musste nochmal auf enter drücken, bis es sich beendet.


Danke es funzt^^:)

Also lag es quasi daran, dass ich den Zwischenspeicher von cin nicht gelöscht hatte und er immer die erste Eingabe mitkopiert?

Wann muss man den immer das cin.ignore(); durchführen?Am besten nach jeder Eingabe oder?

Edit: jetzt kommt der Matheteil im Buch OMG :D
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

8

24.01.2010, 14:03

Zitat

Edit: jetzt kommt der Matheteil im Buch OMG Very Happy

Ja dann, viel spass ;)

Er hat noch was von der Alten eingabe in die neue mitgenommen. Genau.

Zitat

Wann muss man den immer das cin.ignore(); durchführen?Am besten nach jeder Eingabe oder?

Kann nie schaden.

Beiträge: 11

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

9

03.02.2010, 03:42

Dieser Code stürzt bei mir ab, wenn ich mich nicht irre sollte es da eigentlich keine Probleme geben oder?

Ist die selbe Aufgabe: Unzipper

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <TriBase.h>
#include <iostream>

using namespace std;

int main()
{
    //cout << "Eingabe:\n";

    //char eingabe[40];

    //cin >> eingabe;


    tbVFile* pDatei = new tbVFile;
    if(pDatei->Init("grenze.jpg@grenze.zip"))
    cout << "ging nicht!\n";
    
    TB_SAFE_DELETE(pDatei);

    return 0;
}

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

10

03.02.2010, 04:08

Zeile? Ist es so schwer, das direkt dazuzuschreiben?
Entsprechende Datei im richtigen Verzeichnis?
<< an dieser Stelle ist eine Signatur verstorben >>

Werbeanzeige