Eure Meinung



  • Also ich habe öfter mal sachen gefragt und mir wurde gesagt das mein Quellcode nicht sehr sauber ist.
    Sprich auskommentiert und geordnet. Das stimmt leider oft. Nun möchte ich wissen
    Ob dieses hier Besser ist.

    Es ist allerdings noch nicht fertig also nicht wundern. 😃

    //Programm zum verschlüsseln von Texten
    
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    //-----------------------------------------
    //Für den neustart
    int neustart()
    {
      int lange;
    
           //-------------------------------------------------
           //löschen der Daten fals fehler
           remove("keys.txt.crpt");
           remove("psw.txt.crpt");
           remove("langa.txt.crpt");
    	    cout<<"Sie haben das Programm zum ersten mal gestartet oder daten wurden gelöscht.\n";
    	    cout<<"Bitte geben sie die laenge des passworts ein: ";
    	    cin>>lange;
    	    //-----------------------------------------------
    	    //Verschlüsseln und aus und einlesen
    	    lange=lange+52;
    	    ofstream outlange("langa.txt.crpt");
    	    outlange<<lange;
    	    ifstream inlange("langa.txt.crpt");
    	    inlange>>lange;
    
    	    lange=lange-52;
    	    cout<<"Bitte geben sie ein Passwort(maximal "<<lange<<" buchstaben) ein da die Keys gespeichert werden: ";
    	  //-------------------------------------------------------------------
    	  //Das gleiche nochmal mit dem passwort
    	   char pws5[lange];
    	    fgets(pws5,lange,stdin);
    	    fgets(pws5,lange,stdin);
    	   int i=0;
    
    	   while(i<=lange-1)
    	   {
    	       pws5[i]=pws5[i]+2;
    	       i++;
    	   }
            cout<<pws5;
            cin.get();
    	    ofstream out("psw.txt.crpt");
    
    	    out<<pws5;
    
            Sleep(1000);
    	    cout<<"Passwort wurde eingestellt";
            cin.get();
    	}
    
    //--------------------------------------------
    //Verschlüsslen
    int crypt()
    {
    
    }
    
    int decrypt()
    {
    
    }
    
    int main()
    {
        //-------------------------------------------------
        /*
        pws2=Passwort aus Datei
        pwse=Passwort eingabe
        Dateien:
        keys.txt.crpt = Keys die man benutzt hat
        psw.txt.crpt = Passwort
        langa.txt.crpt = länge des Passwortes
        */
    
       int lange2=0;
    
    string pws2;
    string pwse;
    	ifstream in("psw.txt.crpt");
    	//--------------------------------------------
    	//Erster Start
    	if(!in)
    	{
        neustart();
    
    	}
    	//---------------------------------------------
    	//Länge des passwortes einlesen
     ifstream inlange("langa.txt.crpt");
    	    inlange>>lange2;
        //---------------------------------------------
        //entschlüsseln der länge
    	    lange2=lange2-52;
    	    //--------------------------------------
    	    //Passwort einlesen
    	    char pws[lange2];
            in>>pws;
           int f=lange2-1;
          //----------------------------------------------
          //entschlüsseln des Passwortes
           while(f>=0)
    	   {
    	       pws[f]=pws[f]-2;
    	       f--;
    	   }
      pws2=pws;
      int versuche=3;//Versuche für Passwort eingabe
     //-----------------------------------------------
     //Passwort eingabe
      cout<<"\nBitte Passwort eingeben: ";
      while(cin>>pwse)
      {
    
      if(pwse != pws2)
      {
    
          cout<<"\nFehler Falsches passwort noch "<<versuche<<" Versuche.";
          cout<<"\nBitte Passwort eingeben: ";
          //-------------------------------------------------
          //zu oft fasch....
          if(versuche==0)
          {
           cout<<"\nFehler:Keine Versuche mehr Keys und Passwort werden geloescht";
           remove("keys.txt.crpt");
           remove("psw.txt.crpt");
           remove("langa.txt.crpt");
           cin.get();
           return 0;
          }
    versuche--;
      }
      else
      break;
      }
      //-------------------------------------------------------------------
      //Was man machen möchte
    cout<<"\nPasswort akzeptiert!";
    cout<<"\nWeiter bin ich noch nicht aber das groesste ist geschaft.";
    cout<<"\nWas wollen sie machen:\n [V]erschlüsseln oder [E]ntschlüsseln";
    char auswahl;
    cin>>auswahl;
    switch(auswahl)
    {
      case 'v':
      case 'V':
       crypt();
       break;
      case 'E':
      case 'e':
        decrypt();
        break;
      defauft:
       cout<<"\nUnbekannte Eingabe!!";
    }
    cin.get();
    cin.get();
    	return 0;
    }
    

    Was meint ihr kann man das besser verstehen? Was kann ich noch besser machen?



  • du mischt c und c++. das ist nicht gut.



  • detector schlechten codes schrieb:

    du mischt c und c++. das ist nicht gut.

    Was ist denn nicht C++ also C?



  • Stefan benutz mal Klassen!

    Und verzichte auf fgets.



  • Also mit Klassen kenn ich mich noch nicht so aus. Mach ich aber noch. Ist erstmal der anfang. Ich weiß nicht mit was ich fgets ersetzen könnte da fgets ja begrenzt ist. Mit gets könnte es ja passieren das der benutzer trotzdem länger schreibt oder?



  • std::getline



  • getline ist aber kein standart soviel ich weiß.



  • Du solltest sauberer Einrücken!

    Und mach nicht immer so viel Leerabstand, das macht alles nur noch unübersichtlicher!

    //***INCLUDES***//
    #include <iostream> 
    using namespace std;
    
    //***FUNCTIONS***//
    int funktion()
    {
    	//...
    }
    
    //***MAIN FUNCTION***//
    void main()
    {
    	//...
    }
    

    So würde ich es machen...



  • Stefan311 schrieb:

    getline ist aber kein stan**** soviel ich weiß.

    Falsch. Ist Standart!



  • Also im C++ Standart?
    Ich weiß nähmlich das es kein C Standart ist:

    http://www.pronix.de/pronix-793.html



  • Vergiss das Pronix-Buch wenn du C++ lernen willst.



  • Also ist getline standart in C++.(?) 😕



  • ja.



  • Öhm, Stefan...
    Wie lernst du denn C++?
    Mit einem C-Tutorial? 😕

    Stefan311 schrieb:

    Ich weiß nähmlich das es kein C stan**** ist:

    Und daraus schließt du, dass es auch kein C++-Standard ist? 😮



  • Stefan311 schrieb:

    Also im C++ stan****?
    Ich weiß nähmlich das es kein C stan**** ist:

    http://www.pronix.de/pronix-793.html

    Warum zensierst du "Standard"? Ich kann es nicht verstehen...



  • Also ich weiß nicht wo kann ich denn standart von c++ sehen?

    Außerdem nein ich lerne Volkards c++ kurs.

    Und ich probiers jetzt doch mit klassen aber da kommt nur falsches heraus.

    die main.cpp:

    #include <iostream>
    #include <string>
    #include <fstream>
    #include "Klassen.hpp"
    
    using namespace std;
    
    prog program;
    
    int main()
    {
    	while(program.aus()==false)
    	{
    	    program.start();
    	}
    		return 0;
    }
    

    Die include mit klassen:

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    
    class prog
    {
    private:
    int lange;
    int i;
    ifstream in;
    ofstream out;
    
    bool an;
    
    public:
    char pws[];
    int erststart()
    {
           remove("keys.txt.crpt");
           remove("psw.txt.crpt");
           remove("langa.txt.crpt");
    
            cout<<"Sie haben das Programm zum ersten mal gestartet oder daten wurden gelöscht.\n";
    	    cout<<"Bitte geben sie die laenge des passworts ein: ";
    	    cin>>lange;
    	    //-----------------------------------------------
    	    //Verschlüsseln und aus und einlesen
            lange=lange+52;
            out.open("langa.txt.crpt");
            out<<lange;
            out.clear();
            in.open("langa.txt.crpt");
            in>>lange;
            in.clear();
            lange=lange-52;
    	    cout<<"Bitte geben sie ein Passwort(maximal "<<lange<<" buchstaben) ein da die Keys gespeichert werden: ";
    
           cin.clear();
            fgets(pws,(lange-1),stdin);
    
            i=0;
    	    while(i<=lange-1)
    	    {
    	        pws[i]=pws[i]+2;
    	        i++;
    	    }
            cout<<pws;
            cin.get();
            cin.get();
            out.open("psw.txt.crpt");
            out<<pws;
            Sleep(1000);
    	    cout<<"Passwort wurde eingestellt";
            cin.get();
    };
    int start()
    {
    an=true;
    cout<<"Willkimmen";
    
     in.open("psw.txt.crpt");
     if(!in)
    {
        in.clear();
        erststart();
    }
    
    else
    {
    }
    
    };
    
    bool aus(int d)
    {
        bool ann;
        if(d==1)
        {
            ann=false;
        }
        else if(d==2)
        {
          ann=true;
        }
        else
        {
            return ann;
        }
    };
    
    };
    

    Ich weiß alles ein bisschen undeutlich. aufjedenfall kommt bei der passwort eingabe ein Fehler:
    und zwar hier:

    Aus include:

    lange=lange-52;
    	    cout<<"Bitte geben sie ein Passwort(maximal "<<lange<<" buchstaben) ein da die Keys gespeichert werden: ";
    
           cin.clear();
            fgets(pws,(lange-1),stdin);
    

    ich hab es mit getline,cin.getline,gets etc ausprobiert. immer sind dort
    schon bevor man was eingibt smilies.Warum?
    Ich hab mir überlegt vielleicht darf ich nicht direkt auf die Variabeln zugreifen mit denn Funktionen kann das sein?

    Ps:Ich zensiere kein Standart. Das geht automatisch.



  • 1. Wie oft muss eigentlich das Wort Standard noch zensiert werden bis du schnallst, dass es eben Standard heißt?
    2. Ich finde deine Formatierung nach wie vor schrecklich (da inkonsistent).
    3. Ich befürchte char pws[]; wird nicht das machen, was du willst. Nimm ein großes Array oder einen Zeiger auf char.



  • ok 1. Ich bin leider nicht gut in Deutsch. Aber gut Standard.
    2. ich hab das jetzt verbessert.
    3. Ich hatte was missverstanden an klassen. Jetzt bin ich dabei was richtiges daraus zu machen.



  • So jetzt hab ich das schon soweit fertig das man verschlüsseln kann.

    die main.cpp

    #include <iostream>
    #include <string>
    #include <fstream>
    #include "Klassen.hpp"
    
    using namespace std;
    
    int erststart();
    
    prog program;
    
    int main()
    {
    	int i;
    	program.aus(1);
    	while(program.aus(3)==false)//überprüfen ob Proggramm aus soll
    	{
         if(program.dateipruefer()==true)//Dateien überprüfen(im momen verfäscht da man sonst nichts testen kann)
         {
             program.loescheall();
             erststart();
         }
         else
    	cout<<"\nNochmer? 1 ja  2 nein\n";//nochmer?
        cin>>i;
        if(i==1)
         {
         int key;                          //Schlüssel
         char* dname;                       //Dateiname
         cout<<"\nDateiname: ";             
         cin>>dname;
         cout<<"\nKey: ";
         cin>>key;
         program.einlesen(dname,key);     //einlesen verschlüsseln speichern
         }
    else
    {
       program.aus(2);                      //aus einstellen
    
    	}
    	cout<<"Bis dann.";
    	cin.get();
    	cin.get();
    	}
    		return 0;
    }
    
    int erststart()
    {
    
    }
    

    Die include:

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    
    class prog
    {
    private:
    int lange;
    int i;
    ifstream in;
    ofstream out;
    char pws[];
    bool an;
    
    public:
    
    int loescheall()
    {
           remove("keys.txt.crpt");
           remove("psw.txt.crpt");
           remove("langa.txt.crpt");
    
    };
    bool dateipruefer()     //Datei prüfen
    {
    in.open("psw.txt.crpt");
    if(!in)
    {
        in.clear();         //Wenn sie nicht existiert wird false zurück gegeben
        return false;       
    }
    else
    {
      in.clear();
      return true;          // ''  ''   ''     ''       ''  true    ''      ''
    }
    };
    
    int aus(int d)              //Das ein auschalt modul
    {
        bool ann;
        if(d==1)
        {
            ann=false;
        }
        else if(d==2)
        {
          ann=true;
        }
        else
        {
            return ann;
        }
    };
    
    char crypt(char ch,char key)//verschlüsseln
    {
        return ch+key;
    }
    char einlesen(char* dname,char key)//einlesen
    {
    char* ende=".crpt";         
    char infile;
    in.open(dname);
    strcat(dname,ende);              //.crpt dranhängen                       
    out.open(dname);
    while(!in.eof())                //verschlüsseln
    {
     char ch=in.get();
    out<<crypt(ch,key);
    }
    }
    
    };
    

    Jetzt ist es auch übersichtlicher. Ich glaube das wird mein erstes richtig gutes Programm mit oop in C++. 🙂



  • Stefan311 schrieb:

    Jetzt ist es auch übersichtlicher. Ich glaube das wird mein erstes richtig gutes Programm mit oop in C++. 🙂

    du wolltest es ja so (von gut oder gar oop kann wohl kaum die Rede sein):

    die main.cpp

    #include <iostream>
    #include <string>
    #include <fstream>
    #include "Klassen.hpp"
    
    using namespace std;
    
    int erststart();
    

    oop?

    prog program;
    

    oop?

    int main()
    {
    	int i;
    	program.aus(1);
    	while(program.aus(3)==false)//überprüfen ob Proggramm aus soll
    	{
         if(program.dateipruefer()==true)//Dateien überprüfen(im momen verfäscht da man sonst nichts testen kann)
         {
             program.loescheall();
             erststart();
         }
         else
    	cout<<"\nNochmer? 1 ja  2 nein\n";//nochmer?
        cin>>i;
        if(i==1)
         {
         int key;                          //Schlüssel
         char* dname;                       //Dateiname
         cout<<"\nDateiname: ";             
         cin>>dname;
         cout<<"\nKey: ";
         cin>>key;
         program.einlesen(dname,key);     //einlesen verschlüsseln speichern
         }
    else
    {
       program.aus(2);                      //aus einstellen
    
    	}
    	cout<<"Bis dann.";
    	cin.get();
    	cin.get();
    	}
    		return 0;
    }
    
    int erststart()
    {
    }
    

    Die include:

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    
    class prog
    {
    private:
    int lange;
    int i;
    ifstream in;
    ofstream out;
    char pws[];
    

    c++?

    bool an;
    
    public:
    
    int loescheall()
    {
           remove("keys.txt.crpt");
           remove("psw.txt.crpt");
           remove("langa.txt.crpt");
    
    };
    bool dateipruefer()     //Datei prüfen
    {
    in.open("psw.txt.crpt");
    if(!in)
    {
        in.clear();         //Wenn sie nicht existiert wird false zurück gegeben
        return false;       
    }
    else
    {
      in.clear();
      return true;          // ''  ''   ''     ''       ''  true    ''      ''
    }
    };
    
    int aus(int d)              //Das ein auschalt modul
    {
        bool ann;
        if(d==1)
        {
            ann=false;
        }
        else if(d==2)
        {
          ann=true;
        }
        else
        {
            return ann;
        }
    };
    

    reicht nicht ein bool fuer ann?

    char crypt(char ch,char key)//verschlüsseln
    {
        return ch+key;
    }
    

    std::string?

    char einlesen(char* dname,char key)//einlesen
    {
    char* ende=".crpt";         
    char infile;
    in.open(dname);
    strcat(dname,ende);              //.crpt dranhängen                       
    out.open(dname);
    while(!in.eof())                //verschlüsseln
    {
     char ch=in.get();
    out<<crypt(ch,key);
    }
    }
    

    std::string?

    };
    

    Schau dir nochmal das Design von Klassen an und ueberlege, ob hier eine Klasse sinnvoll ist. Warum gibt es hier kein Konstruktor? Was ist mit Kopieren der Klasse? Destruktor? Warum verwendest du ueberall char statt std::string? Du solltest anfangen deinen Code sauber einzuruecken. So faellt es einem schwer alles zu lesen.



  • Also Stings kanns du mir da eine Seite darüber empfehlen weil ich immer wenn
    ich strings nutzen will mit gets,fgets und getline auf die nase gefallen weil
    die nur chars wollen. 😞
    OOP ich komme irgendwie nicht dahinter. Das ist doch einfach um funktion
    einfacher zu sehen,übersichtlicher. oder? 😕


Anmelden zum Antworten