prog für password funztz i-wie nich



  • schaich schrieb:

    ...
    int main()
    {
    void run();
    run();
    ...
    

    ähhh - das hat Dir bestimmt der Compiler angemahnt. Also mal in die Warnings sehen ....

    Tipp: "void run();" ist da falsch und braucht's nicht...

    Gruß,

    Simon2.

    P.S.: Mit Codeeinrückungen sehen nicht nur wir, sondern auch Du besser, was los ist. 😉 (sind aber vermutlich TABs, die beim Copy/Paste hierhin verloren gegangen sind)



  • ja ich hab nur keinen anderen namen gefunden...
    Oder was meinst du??



  • ist auch keine warnung...



  • void run();
    
    int main()
    {
       run();
    
       std::cin.get();
    }
    


  • Achso.
    Macht aber keinen Unterschied.

    schaich



  • schaich schrieb:

    ja ich hab nur keinen anderen namen gefunden...
    Oder was meinst du??

    Wie der Namenskollege schon andeutete: Am "Namen" liegt's nicht.
    Du definierst Dir da eine Variable namens "run" und die rufst Du in main() auf ... nicht "die run()", die Du außen definiert hast.

    Gruß,

    Simon2.



  • 1. Inkludier <string>
    2. Schreibe in der main routine ein return statement.

    Dann sollte es wenigstens kompilieren.

    Gruss Simon



  • alles wie gehabt....
    der merkt immernoch nicht dass ich ein passwort eingegeben hab...

    schaich



  • ja, aber vorher hats doch gar nicht korrekt kompiliert.
    auf jedenfalls kannst du jetzt debuggen. dann findest du den fehler bestimmt.



  • Das ist auch eine endloss rekursion. 😉

    EDIT:

    void Password::setPw(string newPw){
    
    if(currentPw!="")
    {
        // hier kommt er nie an
    


  • Ich wollte nur mal anmerken dass eine lokale Funktionsdeklaration sowie ein fehlendes return in main in C++ vollkommen legal sind.



  • @LordJaxom
    Ok, danke. Das fehlende return in in main generiert allerdings eine warning (vc++6.0). ev. ist das bei neueren kompilern nicht mehr der fall.



  • simon.gysi schrieb:

    vc++6.0

    ... generiert noch deutlich mehr Probleme. Sofern man nicht gezwungen ist vc++ 6.0 zu verwenden sollte man davon (u.a. wegen fehlernder Standardkonformität) eh gewaltigen Abstand nehmen.



  • Anmerkung schrieb:

    simon.gysi schrieb:

    vc++6.0

    ... generiert noch deutlich mehr Probleme. Sofern man nicht gezwungen ist vc++ 6.0 zu verwenden sollte man davon (u.a. wegen fehlernder Standardkonformität) eh gewaltigen Abstand nehmen.

    Danke für den Hinweis. Leider bin ich beim momentanen Projekt gezwungen. Ansonsten sind mit konformere und komfortablere IDE / Compiler auch lieber.



  • Wie kann ich denn Abfragen, ob ein Strin quasi leer ist also kein Zeichen hat??
    MfG schaich



  • Hat sich erledigt, hab gar nicht gesehen, dass ich nur ein Gleichzeichen geschrieben hab.



  • steht in jeder C++-Referenz unter "strings"
    www.cplusplus.com/reference
    www.cppreference.com



  • empty() ...

    #if !defined(PASSWORD_HPP__INCLUDED)
    #define PASSWORD_HPP__INCLUDED
    
    #if (_MSC_VER >= 1300)
    #pragma once
    #endif // (_MSC_VER >= 1300)
    
    #include <string> // std::string
    
    class Password
    {
    	std::string m_current;
    
    public:
    	Password(std::string const& password)
    		: m_current(password)
    	{}
    
    public:
    	bool set(std::string const& password, std::string const& new_password) { if (m_current != password) return false; m_current = new_password;  return true; }
    	std::string const& get() const { return m_current; }
    };
    
    #endif // PASSWORD_HPP__INCLUDED
    
    #include "password.hpp"
    #include <iostream>
    #include <string>
    
    int main()
    {
    	Password password("test");
    
    	for (unsigned char i(1); i <= 3; ++i)
    	{
    		std::cout << "Passwort: ";
    		std::string password;
    		std::getline(std::cin, password);
    		std::cout << "Neues Passwort: ";
    		std::string password_new;
    		std::getline(std::cin, password
    
    		if (password.set(password, new_password) == false)
    			std::cerr << "FEHLER: Falsches Passwort eingegeben! (Noch " << 3 - i << " Versuche)" << std::endl;
    		else break;
    	}
    	std::cout << "Passwort: " << password.get() << std::endl;
    	std::cin.get();
    }
    

    So hast du es mal anständig unterteilt. Die Klasse Password lässt nur zu, das du ein neues Passwort setzt (set), wenn das Passwort stimmt. Insgesamt hat man 3 Versuche das Password richtig einzugeben (for 1 ... 3).

    So in etwa das was du haben willst?

    Wäre vllt jetzt ganz gut das m_current noch zu verschlüsseln usw 😉


Anmelden zum Antworten