nur irgendwie kriege ich den mit Dev-C++ 4.9.9.2 nicht kompiliert.
Kriegt ihr das mit nem anderen Programm hin?
Der Code ist richtig. Also es gibt keine Fehler.
__________________
Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Bitte ein bisschen präziser ... wenn du es nicht kompiliert bekommst, wird wohl ein Fehler oder irgendwas kommen ... Was passiert denn wenn du in Dev-C++ das Programm kompilierst?
Weil ich ihn aus einem Forum habe. Und da ist der auch richtig!! Die haben den Quellcode aber mit dem Borland 5 Prog zur exe gemacht. Also müsste ich den Compiler haben, aber das Problem ist dass der nur unter 32bit läuft ich hab Win7 64bit. Und der läuft auch nur unter 95,98 und NT. Über Kompilitätsmodus gehts net. Also brauch ich nen PC mit 95,97 oder NT. Aber Virtuell will ich net machen da damit der PC vollgemüllt wird. Also brauch ich einen Geeigneten Kompiler. Oder kann man den S***** umformen? Und ja Englisch kann ich
Der Code ist falsch, es muss "int main(){" sein und nicht "int main{" , plus änder das "return 0()" in "return 0;" . Des weiteren sind "gotoxy(int,int)" und "getpass(...)" kein Standard sonder Compiler spezifisch, die Gesamte "conio.h" ist kein Standard.
Ich hab hier mal aus purer Langeweile heraus und wegen dem Spaß am programmieren, eine "ähnliche" Implementierung in C++ verfasst. Der Einfachheit halber, habe ich selbst keine Klassen angelegt. Es werden reine STD-C++ Funktionen verwendet und keine System abhängigen Libs.
Mein Versuch:
login.h -> Schnittstelle der eigentliche Logik
Code:
/* login.h */
#ifndef LOGIN_H_INCLUDED
#define LOGIN_H_INCLUDED
#include <iostream>
#include <string>
/* Aufbau der Logindaten */
struct Zugangsdaten
{
std::string id_nr;
std::string passwd;
};
/* Lässt X Anmeldeversuche zu. Sind die Logindaten korrekt, wird TRUE
* zurückgegeben. Sollte innerhalb der X versuchen kein korrekter versuch dabei
* sein, wird FALSE zurückgegeben. Werte kleiner 1 haben keine Auswirkung. Ohne
* Angabe werden automatisch 3 Versuche eingestellt.
*/
bool login(const int versuche_max = 3);
#endif // LOGIN_H_INCLUDED
login.cpp -> Implementierung der eigentlichen Logik
Code:
/* login.cpp */
#include "login.h"
using namespace std;
/* Abfrage der ID-Nummer und das dazugehörige Passwort
* interner Verwendungszweck
*/
Zugangsdaten get_login_data()
{
Zugangsdaten temp; /* temporärer Speicher der Logindaten*/
/* Abfrage der ID-Nummer und das dazugehörige Passwort */
cout << "ENTRY TO PENTAGON" << endl
<< "~~~~~~~~~~~~~~~~~" << endl
<< endl
<< "IDNR: ";
getline(cin, temp.id_nr);
cout << "PASSWORD: ";
getline(cin, temp.passwd);
return temp;
}
/* TRUE wenn Logindaten korrekt, FALSE wenn nicht
* (Logindaten sind in dieser Funktion gespeichert)
* interner Verwendungszweck
*/
bool check_login_data(const Zugangsdaten& login)
{
/* Zugangsdaten für das "Pentagon" ... */
const Zugangsdaten pentagonzugang = {"666", "drin"};
/* TRUE wenn Login korrekt, FALSE wenn nicht */
return ( login.id_nr == pentagonzugang.id_nr
&& login.passwd == pentagonzugang.passwd);
}
/* Siehe login.h */
bool login(const int versuche_max)
{
/* Anzahl der Anmeldeversuche (Werte kleiner 1 machen keinen Sinn) */
Zugangsdaten login_daten; /* Speicher der Logindaten */
int versuche = 0; /* Zähler der Anmeldeversuche */
do
{
/* Abfrage der Logindaten */
login_daten = get_login_data();
/* Prüfen der Logindaten */
if(check_login_data(login_daten))
{
/* Login war korrekt */
cout << endl
<< "!! ACCESS GRANTED !!" << endl
<< endl;
return true;
}
else
{
/* Login war falsch */
versuche += 1;
cout << endl
<< "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<< "!! ACCESS DENIED !!" << endl
<< "!! WRONG ID-NUMBER OR PASSWORD !!" << endl;
/* Darf man es noch Mal versuchen? */
if(versuche < versuche_max)
{
/* Ja */
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<<"Pleas try again ..." << endl
<< endl
<< endl;
}
else
{
/* Nein */
cout << "!! SYSTEM ABBORTED !!" << endl
<< "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl
<< endl;
return false;
}
}
}while(versuche < versuche_max);
return false;
}
main.cpp -> Noch eine Beispielhaft Verwendung von login.cpp
Code:
/* main.cpp */
#include "login.h"
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
/* Beispielprogramm */
int main()
{
/* In das Pentagon einloggen */
if(login())
{
/* Hier kommt der Code, der nach einer erfolgreichen Anmeldung
* Ausgefürht werden soll. Hier ein Beispiel ...
*/
bool logout = false;
cout << "Sie wurden als gültiger Nutzer anerkannt ..." << endl
<< "Herzlichen Glückwunsch!" << endl
<< endl
<< "Warte auf ihre eingabe (Hilfe mit \"help\")" << endl
<< endl;
/* so lange bis logout gewünscht wird */
while(!logout)
{
string befehl;
/* Benutzer nach Befehlen Fragen */
cout << "root@pentagon$ ";
getline(cin, befehl);
/* Befehle abarbeiten */
if(befehl == "help")
{
/* Befehl <<help>> */
cout << "Mögliche Befehle:" << endl
<< endl
<< "help\t\tDieser Text" << endl
<< endl
<< "logout\t\tAusloggen und Programm beenden" << endl
<< endl;
}
else if(befehl == "logout")
{
/* Befehl <<logout>> */
cout << "Logout wird durchgeführt ..." << endl
<< endl;
logout = true;
}
else
{
cout << "Unbekannter Befehl: \"" << befehl << '\"' <<endl
<< "Versuchen sie \"help\"" << endl
<< endl;
}
}
}
else
{
/* Hier kommt der Code, der nach einer NICHT erfolgreichen Anmeldung
* Ausgeführt werden soll. Hier ein Beispiel ...
*/
cout << "Sie wurden als Hacker identifiziert ..." << endl
<< "Ihr Standort wird zurückverfolgt!" << endl;
exit(-1);
}
/* Hier kann Code stehen, der Immer ausgeführt wird, egal ob erfolgreich
* Angemeldet sind, oder nicht. (Nur möglich, wenn das Programm in der
* IF-Bedingung nicht beendet wurd. Also bei dem Beispiel nur für
* Angemeldete Nutzer sichtbar ...
*/
cout << "Bitte besuchen sie uns bald wieder ..." << endl;
return 0;
}
Sorry,
bin noch Neuling in dem Gebiet
Also macht die Main.cpp den Hauptteil und die .h sind die funktionen die die main.cpp dafür benötigt?
Wie kompilier ich das denn? Ich habe alle Dateien per Dev-C++ auf'm Desktop abgespeichert. Aber wenn ich jetzt auf die Main gehe und f9 zum kompilieren drücke dann steht da.
[Linker Error] undefined reference to login(int)
Id returned 1 exit status.
Wo ist denn der Fehler oder liegst an meinem Kompiler?
Hab das ganze jetzt als Projekt gemacht. Da kommen aber noch mehr Fehler.
__________________
Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Also, login.cpp liefert alle Funktionen für den Login (also "bool login(int versuche);") in der Header-Datei stehen die Deklarationen (Also Namen der Funktionen), damit man ein anderes Programm mit login.cpp bekannt machen kann (login.h ist so eine art Betriebsanleitung).
main.cpp ist von mir nur ein Beispielprogramm. Es kann aber durch jedes andere beliebige selbstgeschrieben Programm ersetzt werden (wichtig ist, dass in dem Programm #include "login.h" steht, damit es eben weiß, wo die Funktionen zu finden sind).
Damit du das ganze Kompilieren und Linken kannst, musst du (ich mach es jetzt mal ganz simpel) ein Projekt erstellen und alle drei Dateien einfügen. Danach solltest du es kompilieren können.
\a ist eine [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] und steht für BELL. Überall wo du das hinschreibst/ausgibst, wird ein Warnton erzeugt. Also einfach in login.cpp fast ganz unten in der letzten else{} "cout << '\a';" hinschreiben. Wenn du es bei jeder Falschen Passworteingabe haben willst, schreib es in die vorletze else{} (zb. nach "...<< "!! WRONG ID-NUMBER OR PASSWORD !!"" << endl; )
Ah okey,
kann ich das auchso machen das das Piepen mehrmals kommt? also nicht
cout << '\a';
cout << '\a';
cout << '\a';
sondern in abständen alle 3 sek oder so.
Und das das auch mit Ton aus geht?
Also manche Viren ertönen ja auch wenn der Ton aus ist.
Kann man das nicht in eine Schleife machen? Also mit while?
__________________
Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Sleep() ist unter Windows für das warten eines Prozesses zuständig. Sleep(3000); wartet 3 Sekunden lang, bis der Prozess, nach dem Aufruf von Sleep() wieder fortgesetzt wird.
Wenn ich dich richtig verstehe, willst du das haben ...
Für Sleep musst du noch windows.h einbinden. Aber dann geht der Code nur mehr unter Windows. Sleep() wird in Millisekunden angegeben (Sekunden mal 1000). Ohne Sleep läuft es zwar wieder überal, aber es piept dann etwas schneller und wird dir sehr wahrscheinlich dein OS zu Fall bringen ...
Aber ganz ehrlich, das ist eher eine Pfuschlösung. Möglich wäre noch die boost-libs zu verwenden, dann wäre das Problem mit der Systemabhängigkeit auch gelöst. Aber dazu rate ich dir, dass du dich mal eher Allgemein mit dem Thema C++ beschäftigst, bevor du mit solchen sachen wie threads und boost anfängst.