Autor Beitrag
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 23:18 
Hallo,
neues Thema neues Glück!
Also,
ich will nun abfragen das wenn das was die Console rückgibt ein Buchstabe ist das dan Ein Text wie z.B Console.WriteLine("Bitte nur zahlen eingeben!!!");
Naja nur das Problem ist, mit was mache ich das am besten?
Mit einer if anweisung oder mit einer switch-case anweisung?
Ich habe es mal mit einer switch-case anweisung versucht
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
string text= Console.ReadLine();
switch(text)
{
case "A":
Console.WriteLine("Bitte nur zahlen eingeben!!!")
break;
case "B":
Console.WriteLine("Bitte nur zahlen eingeben!!!")
break;
case "C":
Console.WriteLine("Bitte nur zahlen eingeben!!!")
break;
// Weiter bis zu "Z"
}

Wenn ich jetzt z.B. A eingebe dann gibt er mir dieses: "Bitte nur zahlen eingeben!!!" aus.
Aber wenn ich jetzt ABC eingebe dann stürzt er ab. Aber wie kann ich das lösen? Ich kann ja nicht alle Wörter der Welt in meine switch-case anweisung einbauen?!

Mfg Storestore

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 01.09.11 23:32 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
Halloich will nun abfragen das wenn das was die Console rückgibt ein Buchstabe ist das dan Ein Text wie z.B Console.WriteLine("Bitte nur zahlen eingeben!!!");

Seltsam: Dem Benutzer sagst du, dass nur Zahlen eingegeben werden dürfen, dem Programm aber, dass keine Buchstaben erlaubt sind. Was trifft es wohl eher?

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich jetzt ABC eingebe dann stürzt er ab.

Wenn du das Programm aus Visual Studio heraus aufrufst, stürzt es nicht ab. Es zeigt dir eine Exception angezeigt, beim Aufruf der int.Parse-Methode, oder? Und jetzt such mal nach einer Methode, die keine Exception wirft, wenn sie falsche Eingaben bekommt, sondern dir den Fehler anders mitteilt. Ist gar nicht so schwer.
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 00:46 
Oder ich versuch es mit try and catch!

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Fr 02.09.11 08:22 
Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können.
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 11:08 
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können.

Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte.

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 02.09.11 11:16 
if(int.TryParse(source,target)==true)
//erfolgreich
else
//nicht erfolgreich

Für diesen Beitrag haben gedankt: storestore
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Fr 02.09.11 11:19 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Schau lieber mal ob dir int nicht noch andere Funktionen bereitstellt. Parse hast du ja schon gefunden aber es gibt da bessere Varianten die auch mit falschen Eingaben umgehen können.

Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte.


try-catch Böcke sind für sowas nicht gedacht. Es ist ganz schlechter Styl sie für solches zu missbrauchen.

dark-destination1988 hat die beste Lösung gepostet, bis auf zwei kleinigkeiten.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
int zahl;
string text = Console.ReadLine();
if(int.TryParse(text,out zahl)) // == true ist völlig unnötig. TryParse gibt schon einen Boolean zurück 
//erfolgreich. das ergebnis steht jetzt in 'zahl' 
else 
//nicht erfolgreich

Für diesen Beitrag haben gedankt: storestore
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 02.09.11 11:21 
sorry das mit dem out hat ich auch gerade gemerkt ;) und das true schreib ich immer mit hin (klar ist es unnötig aber besser lesbar)

Für diesen Beitrag haben gedankt: storestore
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 11:27 
Ok, danke klappt super. Denoch würde ich gerne wissen wozu eig. try and catch dient!

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Fr 02.09.11 11:32 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
Ok, danke klappt super. Denoch würde ich gerne wissen wozu eig. try and catch dient!


try-catch dient zum Abfangen von Exceptions(Ausnahmen). Wie der Name schon sagt sind Ausnahmen Dinge, die nicht zum festen Programmablauf gehören. Wenn es geht sollte man daher versuchen Eingaben vorher zu prüfen, und nicht die Exception zum prüfen von Eingaben missbrauchen.
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Fr 02.09.11 11:33 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
Ok, was wäre den an try and catch so schlimm? Das ist doch eig. genau das was ich möchte.


Nehmen wir mal ein Beispiel:
Du willst mit einem Auto fahren weisst aber nicht ob die Bremsen funktionieren.
Die TryParse Variante wäre zu probieren ob die Bremsen greifen, wenn nicht weisst du es vorher.
Die Try Catch Variante heisst du fährst einfach los und merkst während der Fahrt das die Bremsen nicht funktionieren also fährst du gegen einen Baum. Aber macht ja nichts, die Airbags (Catch) haben dich ja gerettet.

Try Catch ist für Sachen die du nicht kontrollieren kannst. Nehmen wir zum Beispiel mal an du willst eine Datei im Netzwerk lesen aber in dem Moment zieht der andere das LAN-Kabel raus. Anstatt nun das ganze Programm Abstürzt kannst du mit dem Catch den Fehler auswerten/behandeln.

Oder für Fehlerberichte:
Man kann im äußersten Bereich der Anwendung ein TryCatch verwenden um Fehlerberichte zu erstellen.
Quasi wenn irgendein unerwarteter Fehler auftritt wird es wenigstens noch protokolliert und kann an den Entwickler gesendet werden.
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 13:01 
Naja, da das Prgramm das ich programmierer zu Übungszwecken dient will ich es auch mit try und catch versuchen

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 02.09.11 13:14 
viel spaß beim gegen baum fahren ;)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 02.09.11 13:18 
user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
will ich es auch mit try und catch versuchen

:zustimm:

Solange du die Ratschläge im Kopf behältst und in der fertigen Anwendung berücksichtigst.
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 13:26 
Hallo,
ja natürlich werde ich die Ratschläge im Kopf behalten. Da es aber wirkch nur zu übungszwecken dient würde ich es mal gernen mit try und catch versuchen

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Fr 02.09.11 21:27 
Hier ist mal der neue Code:
Sorry für den dopple post aber sonst kommt man durcheinander *Rausreden*
Da ich es ja mit try and catch versuchen wollte bliebe mir eig. nix anders möglich als alles in eine Methode abzuwickeln, oder? Wenn ich in catch einfach wieder eine Schleife einbinde, bringt mir das nix. Wenn mir der user wieder ein Buchstabe eingibt dann habe ich den gleichen salat wie in der aller ersten Frage beschrieben. (Aber ein Salat ohne Dressing, frischen Gemüse und saftigen geilen Chrimps *Hmmmm*)
mfg storestore
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            Methode();
        }
        static void Methode()
        {


            try
            {
                string wiederholen;
                string darfnichtsein;

                do
                {




                    // Abfrage
                    Console.WriteLine("Hallo, geben sie bitte ihr aktuelles \"Vermögen\" ein!");
                    // Die Variable
                    darfnichtsein = Console.ReadLine();
                    double geld = Convert.ToDouble(darfnichtsein);

                    // Abfrage2
                    Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?");
                    Console.WriteLine("D= draufzahlen, A=Abziehen!");
                    string text = Console.ReadLine();
                    if (text == "D" || text == "d")
                    {   // Was soll er machen
                        Console.WriteLine("Wie viel wollen sie drauf zahlen?");
                        double draufzahlen = Convert.ToDouble(Console.ReadLine());
                        geld = geld + draufzahlen;
                        Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro");
                        Console.ReadLine();
                    }
                    // Was wenn es nicht stimmt
                    else if (text == "A" || text == "a")
                    {
                        Console.WriteLine("Wie viel wollen sie abheben?");
                        double abheben = Convert.ToDouble(Console.ReadLine());
                        geld = geld - abheben;
                        Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro");
                        Console.ReadLine();
                    }
                    else
                    // Else again .,.
                    {
                        Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen");
                        Console.ReadLine();
                    }
                    Console.WriteLine("Nochmal? Dan drücker 'N'  oder'n'");
                    Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben");
                    wiederholen = Console.ReadLine();



                    Console.Clear();




                } while (wiederholen == "N" || wiederholen == "n");
            }

            catch
            {
                Console.WriteLine("Bitte Nur zahlen angeben"
                    + " nächster versuch *Augen roll !!!* Bitte Enter drücken ");
                Console.ReadLine();
                Console.Clear();
            
               
               
                Methode();



            }
            }
        }
    }

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 03.09.11 12:32 
Schon wieder eine Rekursion, und jetzt auch noch parallel zur Schleife. Du bist einfach unverbesserlich... :roll:
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Sa 03.09.11 12:36 
Hi, ja aber wie soll ich das den sonst machen wenn ich try and catch verwenden will? Ich kann es ja wieder mit einer schleife machen aber wenn ich das zweite mal auch wieder Buchstaben eingebe dann stürtzt er ab! Aber alle machen viele Sachen mit Methoden wieso gibt es bei mir sofort eine rekursion?

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Sa 03.09.11 13:14 
Irgendwie wird hier am selben Programm in zwei unterschiedlichen Forenthreads gebastelt und die Erkenntnisse aus dem einen Thread gelangen nicht in den anderen.
Vgl. hier www.c-sharp-forum.de....php?p=649488#649488 - da ist das mit der Rekursion bereits gelöst.

_________________
Delphi: XE - OS: Windows 7 Professional x64
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: So 04.09.11 10:06 
Nene! Das eine war nur für die Methode. Das hier ist der versuch mit Try und catch! Aber ohne eine Methode bekomme ich das nicht hin!

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"