Laden...

Altersüberprüfung mit max 3 Versuchen überprüft nur zwei mal und stoppt danach

Erstellt von mistercoolios vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.650 Views
Thema geschlossen
M
mistercoolios Themenstarter:in
1 Beiträge seit 2015
vor 8 Jahren
Altersüberprüfung mit max 3 Versuchen überprüft nur zwei mal und stoppt danach

Hallo,

mein erster Programmcode mit Visual Studio 2015 soll das Alter und das Passwort überprüfen, damit jemand ein Spiel herunterladen kann, aber es ist nicht gut programmiert und nach der 2. falschen Eingabe des Passworts hört es einfach auf. Könnte jemand das bitte mithilfe von Methoden optimieren? Ich blicke da nicht ganz durch.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ErsteKonsolenanwendung
{
    class Program
    {
        static void Main(string[] args)
        {

            string name, passwort1, passwort2;
            double alter, versuche = 3;

            Console.Write("Bitte geben Sie Ihren Namen ein: ");
            name = Console.ReadLine();

            Console.Write("Bitte geben Sie Ihr Alter ein: ");
            alter = Convert.ToDouble (Console.ReadLine());

            Console.Write("Bitte geben Sie Ihr Passwort ein: ");
            passwort1 = Console.ReadLine();
            Console.WriteLine();

            Console.WriteLine("Name: " + name);
            Console.WriteLine("Alter: " + alter);
            Console.WriteLine();

            if (alter >= 18)

            {
                Console.Write("Sie dürfen das Spiel herunterladen, bitte geben Sie Ihr Passwort ein: ");
                passwort2 = Console.ReadLine();

                 if (passwort1 == passwort2)

                {
                    Console.WriteLine("Ihr Passwort ist richtig, Sie werden weitergeleitet");
                    Console.ReadKey();
                }

                 else

                {
                    versuche = versuche - 1;
                    
                    if (versuche > 0)

                    {
                        Console.Write("Falsche Eingabe, noch " + versuche + " Versuche, bitte Passwort erneut eingeben: ");
                        passwort2 = Console.ReadLine();

                        if (passwort1 == passwort2)

                        {
                            Console.WriteLine("Ihr Passwort ist richtig, Sie werden weitergeleitet");
                            Console.ReadKey();
                        }

                        else

                        {
                            versuche = versuche - 1;
                            Console.Write("Falsche Eingabe, noch " + versuche + " Versuche, bitte Passwort erneut eingeben: ");
                            passwort2 = Console.ReadLine();
                            
                        }

                    }

                    else

                    {
                        Console.WriteLine("Sie haben Ihr Passwort zu oft falsch eingegeben");
                        Console.ReadKey();
                    }
                }

            }

            else

            {

                Console.WriteLine("Sie dürfen das Spiel nicht herunterladen");
                Console.ReadKey();

            }

        }
    }
}


2.207 Beiträge seit 2011
vor 8 Jahren

Hallo mistercoolios,

wir sind hier nicht um deine Fehler zu korrigieren. Wir machen dir nicht deine Arbeit. Bitte grenze den Fehler ein und poste nur den relevanten Code.

[Hinweis] Wie poste ich richtig? Punkt 4.1 " Postet stattdessen bitte nur den relevanten Code direkt im Beitrag." 4.2 und Punkt 5.

Du kannst aber auch den [Artikel] Debugger: Wie verwende ich den von Visual Studio? benutzen um dem Fehler auf die Schliche zu kommen.

Wenn dein Code ohne Fehler läuft kannst du ihn auch in den dafür vorgesehenen Code-Reviews-Bereich posten. Da kann man ihn dann Reviewen. Beachte aber bitte die Regeln dazu. Code-Review Regeln

Gruss

Coffeebean

J
251 Beiträge seit 2012
vor 8 Jahren

Verbesserungsvorschlag beim kurzen überfliegen: Versuche es mit ner Schleife (while, for,..)

2.298 Beiträge seit 2010
vor 8 Jahren

Hallo,

ich habe hier zwar gerade mal etwas vorbereitet, werde es dir jedoch nicht geben. - Wenn du bei dem was du dort programmiert hast schon nicht durchsiehst, wird mein Code dich vor noch mehr Fragen stellen.

Aber mal ein paar Verbesserungsvorschläge:
*Erstelle für den Benutzer eine Klasse mit den Properties Name, Alter und Passwort *Erstelle eine Klasse für die Validierung der Eingaben (Methode zur Validierung des Alters; Methode zur Validierung des Passworts) *Nutze für die Passworteingabe eine "do-while"-Schleife solang das Passwort nicht gültig ist bzw. bis die max. Anzahl Versuche durchgeführt wurde

Die Eingaben und Ausgaben bleiben in dem Schritt erst mal in der Console. - Versuche das mal umzusetzen. Bei Problemen kannst du gern noch einmal Fragen. - Jedoch bitte nur bei Konkreten Problemen, die mit Hilfe der Doku nicht gelöst werden können.

Solltest du keine Probleme haben, kannst du uns dein Ergebnis jedoch noch einmal hier Präsentieren.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.825 Beiträge seit 2008
vor 8 Jahren

Ich hab mir überlegt das Thema zu löschen, weil wir hier nicht bei "macht mal!" sind. Das ist alles andere als cool, Mister.
Hab mich aber dazu entschieden das Thema, wie es Coffeebean angesprochen hat, in den Review-Bereich zu verschieben.

Wer will, der darf also hier gerne ein Review hinterlassen( - verstehe aber, wer es bei so einer Formulierung und Haltung gegenüber einer Gemeinschaft nicht tut; und empfehle es auch nicht. Lasst euch nicht ausnutzen.
Ich persönlich werde aber allein aufgrund der Formulierung nicht die Arbeit des Erstellers übernehmen.

3.003 Beiträge seit 2006
vor 8 Jahren

Okay, es ist dein erster Versuch. Dass deine "macht mal jemand"-Einstellung nicht gut ankommt, hast du ja bemerkt.

Was du auch bemerkt hat, ist, dass du in deinem eigenen Code nicht mehr durchblickst. Da gibt es drei Punkte, an denen du anpacken kannst.

Punkt 1: hat inflames2k abgedeckt: Reorganisiere den Programmablauf.
Punkt 2: vermeide zu tiefe if-else-Verschachtelungen. Code wie diesen hier:


if(bedingung)
{ 
   DoSomething();
   if(zweiteBedingung)
   {
        DoSomethingElse();
        //....und so weiter
   }
   else 
   {
        Console.WriteLine("Die zweite Bedingung ist nicht erfüllt!");
    }
}
else 
{
    Console.WriteLine("Die Bedingung ist nicht erfüllt!");
} 

...kannst du verändern, indem du die Prüfungen umdrehst und "return" als Aussprung benutzt. Dann wird aus obigem Code das hier:


if(!bedingung)
{
    Console.WriteLine("Die Bedingung ist nicht erfüllt!");
    return;
}

DoSomething();
if(!zweiteBedingung)
{
    Console.WriteLine("Die zweite Bedingung ist nicht erfüllt!");
    return;
}
DoSomethingElse();

Manchen hilft die dadurch gewonnene Übersicht, es gibt aber auch gute Gründe gegen eine solche Formatierung. Probier' es aus und schau, ob du eher durchblickst - eventuell hilft es.

Punkt 3: Benutze die richtigen Datentypen, trenne Deklaration und Initialisierung nicht voneinander, und benutze "var" für eine implizite Deklaration. Wenn die Variablen dort erzeugt werden, wo sie benutzt werden, hilft das beim Lesen. (Und es hilft auch, wenn man beim Lesen nicht die Stirn runzeln und sich fragen muss, wieso "versuche" eine double-Variable ist statt einer Ganzzahl.)
Schlecht:


string meinString;
//500 Zeilen Code
meinString = Console.ReadLine();

Besser:


//200 Zeilen Code
var meinString = Console.ReadLine();
//300 Zeilen Code

Neu schreiben wird dir deinen Versuch vermutlich keiner. Das liegt auch daran, dass, wenn man die Ausgaben nicht zählt, du weniger als 20 Zeilen Code hast.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

2.207 Beiträge seit 2011
vor 8 Jahren

Code-Review hin oder her. Der Thread-Ersteller ist mehr darauf aus sein Programm zum (richtigen) Laufen zu bekommen, also Fehler zu beheben (bzw. behoben zu bekommen). Daher haben wir uns beraten und entschlossen den Thread zu schliessen.

Nichts destotrotz sind ja Lösungsvorschläge gekommen die den Threadersteller auch weiterbringen werden. Code-Review Regeln Punkt 2

Gruss

Coffeebean

Thema geschlossen