Passwortabfrage mit 3 Versuchen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von juppwatis, 25. April 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 25. April 2006
    hi @ all!

    bin ja ein newbie in c#...hab grad versucht eine pw abfrage zu machen mit de pw "CSharp" (ohne "). man hat 3 versuche um das richtige pw einzugeben!
    doch wenn man schon beim ersten mal das richtige pw eingegeben hat, dann wird trotzdem noch 2mal abgefragt...wie kann ich das verhindern, also dass nach der richtigen eingabe schluss ist?

    hier der code:

    Code:
    using System;
    
    class Passwort
    {
     public static void Main(string[] args)
     {
     string passwort;
    
     for (byte i = 0; i <= 2; i++)
     {
     Console.WriteLine("Geben Sie bitte das Passwort ein: ");
     passwort = Console.ReadLine();
    
     if (passwort == "CSharp")
     Console.WriteLine("Passwort richtig!");
     else
     Console.WriteLine("Passwort falsch!");
    
     }
     }
    }
    
    mfg juppwatis
     
  2. 25. April 2006
    Kein Plan von C#, aber von der Grundidee solltest du das so machen:

    Code:
     int ok=0 (oder so ähnlich)
     while(!ok)
     {
     Console.WriteLine("Geben Sie bitte das Passwort ein: ");
     passwort = Console.ReadLine();
    
     if (passwort == "CSharp") {
     Console.WriteLine("Passwort richtig!");
     ok=1
     } else
     Console.WriteLine("Passwort falsch!");
     }
    
     
  3. 26. April 2006
    Also ich habs in c++ , vieleicht bringt dir das was

    Code:
    // Passwort Abfrage
    
    
    #include <iostream.h>
    #include <string.h>
    #include <stdio.h>
    #include <windows.h>
    
    void main()
    {
    
     int a=0;
     char b[20];
     
     
     do
     {
     
     system("cls");
     
     
     cout << "Bitte geben Sie das Passwort ein ! ";
    
     cin >> b;
    
     if( !strcmp(b,"CSharp"))
     {
     cout << "Kennwort OK\n\n";
     a=3;
     
     
     }else
     cout << "Falsche Eingabe"<< " noch "<<2-a<<" Versuch(e)\n\n\n";
     a++;
     
     
     }
    while (a<3);
    if( !strcmp(b,"CSharp"))
     {
     system("cls");
     cout<<"\n\n\nWillkommen im Internen Bereich \n\n\n\n";
    }else
     system("cls");
     cout << "\n\n\n3 Mal Falsche Eingabe, das Programm wird Beendet!\n\n\n";
     
    } 
     
  4. 26. April 2006
    Ganz simpel und zwar mit "break"

    Mit break verlässt du die aktuelle Schleife
    Dien Beispiel-Code würde also so aussehen:

    Code:
    using System;
    
    class Passwort
    {
     public static void Main(string[] args)
     {
     string passwort;
    
     for (byte i = 0; i <= 2; i++)
     {
     Console.WriteLine("Geben Sie bitte das Passwort ein: ");
     passwort = Console.ReadLine();
    
     if (passwort == "CSharp")
     Console.WriteLine("Passwort richtig!");
     break; // Aktuelle Schleife verlassen
     else
     Console.WriteLine("Passwort falsch!");
    
     }
     }
    }
     
  5. 26. April 2006
    nee mit
    Code:
    break;
    geht es nicht...hab es auch schon so versucht...es wird trotzdem weiter abgefragt. aber jetzt wo dus sagst...mit der switch-case anweisung könnte es funktionieren. mal sehen
     
  6. 26. April 2006
    aaah ich riesen-ross ^^

    du hast die geschweiften klammenr bei der If-Anweisung vergessen ^^

    So müsste es gehen:
    Code:
    using System;
    
    class Passwort
    {
     public static void Main(string[] args)
     {
     string passwort;
    
     for (byte i = 0; i <= 2; i++)
     {
     Console.WriteLine("Geben Sie bitte das Passwort ein: ");
     passwort = Console.ReadLine();
    
     if (passwort == "CSharp")
     { 
     Console.WriteLine("Passwort richtig!");
     break; // Aktuelle Schleife verlassen
     }
     else
     Console.WriteLine("Passwort falsch!"); // Hier werden keine benötigt, da nur ein Befehl
    
     }
     }
    }
     
  7. 26. April 2006
    jep thx...jetzt gehts...kann man
    Code:
    break;
    etwa überall einsetzten? hab gedacht das geht nur bei der switch-case anweisung!
    warum geht es denn eigetnlich mit "break"? da wird doch dann nur der block der if-anweisung verlassen oder nicht? dann is man doch immernoch in der for-schleife oder irre ich mich da?!
    kannst du denn c#?

    mfg juppwatis
     
  8. 26. April 2006
    Du kannst break inner Schleife oder Case-Anweisung einsetzen

    Das If hat mit dem Break nix zu tun, d.h. mit dem Break verlässt du die schleife. 'Partner' von break is übrigens continue: Mit continue brichst du den aktuellen Durchgang ab und machst gleich mit dem nächsten weiter

    Und ja, ich kann C# (siehe sig) ^^
     
  9. 26. April 2006
    ach so ok...thx gell...hast ne 10 von mir bekommen so wie die anderen auch die versucht haben mir zu helfen

    schick mir mal per PN bitte deine icq nummer! ich hab ein paar fragen an dich, wg c#! thx im voraus

    mfg juppwatis
     
  10. 26. April 2006
    wwaaaaahhhh aufhören
    Himmel Hilf -.-
    "break" und "goto" sind mit die schlimmsten Sachen beim Proggen die man nutzen kann. Da geht der Stil vollkommen den Bach runter. Es gibt immer einen Lösung ohne break (ausgenommen switch/case), nämlich in dem man eine Abbruchbedingung definiert. --> Code wird nachvollziehbar und vorallem zeigt man, dass man verstanden hat.

    Bei deinem Problem ist die Programmiersprache vollkommen egal. Kannst du auch mit'nem Struktogramm machen.

    Sieh dir die Lösungen von CR0SSfiRE an, so löst man das sauber. Ansonste wie coolzero. Bei CR0SSfiRE seiner lösung musst du nur noch eine Zählvariable mit rein bringen und die Sache läuft.

    break wird die aktuelle Struktur verlassen, also Schleifen/Case etc..

    greetz blackbone

    PS: Mir hat mal jmd gesagt: Wenn man es richtig lernt kann man später immer noch ********n, wenn man es gleich zu beginn unsauber macht wird man es nie wirklich können. --> das sollten sich Anfänger zuherzen nehmen, gilt immer^^
     
  11. 26. April 2006
    @blackbone:

    dann änder doch mal mein programm bitte so um dass ich es ohne "BREAK" machen kann! wie sollte ich es denn dann machen? mit ner "BOOL" variable oder wie? bitte prog mir deinen vorschlag mal ok?

    mfg juppwatis
     
  12. 26. April 2006
    das 'goto' zum Spagetti-Code führt is mir klar

    Wieso führt break z.B. bei Schleifen zu unübersichtlichem Code?
    Wenn die Abbruchbedienung klar is, in dem fall "Passwort richtig - verlasse schleife - mache mit Programm weiter"

    Was is da unübersichtlich?
     
  13. 26. April 2006
    Eine riesige Idee, da lernst du am meisten. Wenn man nicht selber denken muss ist es immer am besten, nicht? Ich dachte du willst Programmieren lernen, da solltest du versuchen solche simplen Sachen selbst herraus zubekommen.

    Denk nochmal drüber nach und dann schau dir die Lösung mal in 20min an:
    Ich habs mal schnell bei CR0SSfiRE reineditiert. ...noch nie was mit C# gemacht aber sollte funzen.^^

    //edit:
    ..nein. Die Abbruchbedingung heist "i>2", da steht nirgends dass vorher aufgehört werden darf/soll. Wenn das Programm mal etwas größer wird findest du das kleine "break" nie im Leben und verschwendest unmengen Zeit am debbugen. Stell dir mal vor das break steht an 500terster Stelle. Du läufst Wände hoch, weil du nicht weist warum zur Hölle das Dingens da aufhört. Oder stell dir vor ein anderer ließt den Quellcode.
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.