Programm zur Definition eines Passwortes...
-
Hallo,
ich muss ein Programm zur Definition eines Passwortes erstellen, dass PW soll mindestens 8 Zeichen und 2 Ziffern enthalten... habe schon den Anfang, aber bei den Zeichen und Ziffern komme ich nicht so wirklich weiter... Vielleicht kann mir da ja jemand weiterhelfen, bin nämlich absoluter Neuling im Programmieren
Vielen Dank#include <stdio.h>
#include <conio.h>void main(void)
{
char x[80]; // x = Passwort
int ch;
int i=0;
int Zeichen=0; // Variable zählt Zeichen
int Ziffern=0; // Variable zählt Zifferndo
{
i=0;
Zeichen=0;
Ziffern=0;
printf("\n\nBitte geben Sie ein Passwort mit mindestens 8 Zeichen und 2 Ziffern ein. ");
_cputs( "Nach der Eingabe bitte Enter drücken: " );do
{
ch = _getch();if( ch != '\r')
{printf("*");
x[i]=ch;
}if(ch >= 48 && ch <=57) // ASCII, Zahl 0 - 9
Zeichen;i++;
if(ch>=50) // ASCII, Zahl 2
Ziffern;
i++;
}
while(ch != '\r');
x[i]='\0';
{
printf("Das Passwort soll mindestens 8 Zeichen lang sein!");
printf("\n\n%s\n\n", x);
}
while((i<
|| Ziffern < 2);}
-
1. CPP Tags
2. int main() - return 0
3. <stdio>, <conio>
4. using namespace std
5. cout, cin
6. strings
-
Christoph K. schrieb:
2. int main() - return 0
3. <stdio>, <conio>2. return ist nicht nötig
3. erste heisst <cstdio> und <conio> gibts nicht
-
LordJaxom schrieb:
Christoph K. schrieb:
2. int main() - return 0
3. <stdio>, <conio>2. return ist nicht nötig
3. erste heisst <cstdio> und <conio> gibts nicht
Da main einen int-Wert zurückgibt ist return schon notwendig.
grüße
-
David_pb schrieb:
Da main einen int-Wert zurückgibt ist return schon notwendig.
LordJaxom meinte, dass "return 0;" nicht nötig ist, weil vom Standard festgelegt ist, dass die main-Funktion 0 zurückgibt, wenn nichts anderes angegeben ist.
-
#include <iostream> using namespace std; class pw { private: string passwort; int min_ziffern; int min_zeichen; public: pw(int minziff,int minzeich) { min_ziffern=minziff; min_zeichen=minzeich; } bool is_valid_password() { int ziff=0,zeich=0; for(int i=0;i<passwort.length();i++) { if(passwort[i]>='0'&&passwort[i]<='9') ziff++; else if((passwort[i]>='a'&&passwort[i]<='z')||(passwort[i]>='A'&&passwort[i]<='Z')) zeich++; } return ziff>=min_ziffern&&zeich>=min_zeichen; } string &get_password(){return passwort;} void set_password(string pw){passwort=pw;} }; int main(int argc, char* argv[]) { pw passwort(2,8); string eingabe; while(!passwort.is_valid_password()) { cout << endl << endl << "Bitte geben Sie ein Passwort mit mindestens 8 Zeichen und 2 Ziffern ein." << endl; cin >> eingabe; passwort.set_password(eingabe); } return EXIT_SUCCESS; }
-
ihr könnt auch 'isalpha()' und 'isdigit()' benutzen
-
net schrieb:
ihr könnt auch 'isalpha()' und 'isdigit()' benutzen
Nö das ist C.
-
Quatsch. Es ist genauso auch C++.
-
Quatsch. ist Iso-C.
-
Hi!
Da hat er recht!
Ich bin selbst auch der Meinung das man C++ und C nicht mixen sollte, zumindest nicht da wo's nich unbedingt notwendig ist. 
grüße
-
Dann werft mal einen tiefen Blick in den Standard: 17.4.1.2
Die C-Header mit dem Namen name.h werden in C++ in den Header cname zur Verfügung gestellt. Die Funktionen sind im namespace std abgelegt und sind ansonsten identisch mit denen aus C. Sie gehören somit zu Standard-C++.Mal ganz nebenbei: findet ihr es wirklich besser die Ziffern von Hand abzuprüfen, alsi std::isdigit zu benutzen?

-
also, das war ihr hier so geschrieben habt, hat mir nicht wirklich weiter geholfen... ich muss diesen versuch für die uni machen (programmiersprachenpraktikum) und da benutzen wir Visual Studio 2003.
Die headerdatei conio.h gibts bei uns (Console Input-Outputfunktion).
Vielleicht hilfts ja, wenn ich die komplette Aufgabe nenne:
Programm zur Def. eines PW mit folgenden Bedingungen:
- mind. 8 Zeichen
- mind. 2 Ziffern
auf dem Bildschirm soll für jedes Zeichen ein Stern erscheinen. nach enter soll das Passwort auf Gültigkeit geprüft werden. wenn nicht gültig -> Fehlermeldung und eingabe wiederholen. wenn gültig, passwort ausgeben.
habe bis jetzt die Bedingungen erfüllt, aber das mit der Gültigkeit klappt nicht, da ich irgendwie total durcheinander gekommen bin und nicht mehr weiß, was wo hinkommt...#include <stdio.h>
#include <conio.h>void main(void)
{
char x[80]; // x = Passwort
int ch;
int i=0; // Variable zählt die Zeichen
int Ziffern=0; // Variable zählt Ziffern
int test;
do
{
i=0;
Ziffern=0;
printf("\n\nBitte geben Sie ein Passwort mit mindestens 8 Zeichen und 2 Ziffern ein. \n\n");
_cputs( "\n\nNach der Eingabe bitte Enter druecken: " );do
{
ch = _getch();if( ch != '\r')
{
printf("*");
x[i]=ch;
}if(ch >= 48 && ch <=57) // ASCII, Zahl 0 - 9
{
Ziffern++;
}
i++;
} while(ch != '\r');} while((i <
|| Ziffern < 2);
printf("Das eingegebene Passwort erfüllt die Vorraussetzung (8 Zeichen, davon 2 Zahlen)");
do
{
printf("Bitte geben Sie das Passwort nochmal ein ");
_cputs( "\n\nNach der Eingabe bitte Enter druecken: " );
do
{
ch=_getch();
if( ch != '\r');}while(ch==ch);
printf("\n\n%s\n\n", x);
}
}
-
mase1 schrieb:
aber das mit der Gültigkeit klappt nicht, da ich irgendwie total durcheinander gekommen bin und nicht mehr weiß, was wo hinkommt...
nachdem alle zeichen eingegeben wurden gehst du in einer schleife den string durch und zählst mit 'isalpha' alle zeichen und mit 'isdigit' alle zahlen. wenn das ergebnis der ersten zählung kleiner als 8 oder das der zweiten kleiner als 2 ist dann --> fehlermeldung und sprung an den anfang
-
Vielleicht hilft es, wenn Du Dir den Ablauf mal grob zerlegst:
do { // Meldung ausgeben, daß man ein PW eingeben soll //lies ein Paßwort ein, bis enter, gib dabei * aus (am besten in eine Funktion packen) } while(!eingegebensPaßwort erfüllt Bedingungen) // fertigAm einfachsten dürfte es sein, wenn Du zunächst einzelne Funktionen schreibst, die die Teilaufgaben erledigen können. Also zum Beispiel eine Eingabe prüfen, oder eben einen Text bis Enter einlesen und dabei jeweils * ausgeben.
MfG Jester
-
#include <conio> #include <iostream> using namespace std; int main(int argc, char* argv[]) { int zeichen=0,ziffern=0; char in; bool isvalid; string eingabe; do { eingabe=""; cout << "\n\nBitte geben Sie ein Passwort mit mindestens 8 Zeichen und 2 Ziffern ein. \n\n"; while(true) { in=getch(); if(in!=13) { cout<<"*"; eingabe+=in; } else break; } zeichen=0; ziffern=0; for(int i=0;i<eingabe.length();i++) { if(isdigit(eingabe[i])) ziffern++; else if(isalpha(eingabe[i])) zeichen++; } if(zeichen>=8&&ziffern>=2) { isvalid=true; cout << "\n\nDas eingegebene Passwort erfüllt die Vorraussetzung (8 Zeichen, davon 2 Zahlen)"; } else { isvalid=false; cout << "\n\nDas eingegebene Passwort erfüllt nicht die Vorraussetzung (8 Zeichen, davon 2 Zahlen)"; } } while(!isvalid); return EXIT_SUCCESS; }