Autor Beitrag
coolace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Mo 21.04.08 20:03 
Hallo erstmal,

hab dieses wunderschöne Forum auf der Suche nach Hilfe gefunden :-)
Folgendes, ich muss mich im Sinne meines Studiums mit C# beschäftigen
und bekomme folgende Aufgabe nicht hin.
Zitat:
Dem Programm werden beliebige Zahlen als Kommandozeilenparameter übergeben, es speichert ganze Zahlen (aus dem int-Bereich) in einem int -Feld i1, Zahlen aus dem long-bereich in einem long-Feld l1; Kommazahlen in einem double Feld l1. Ungültige Zahlenformate werden nicht gespeichert.

Das heißt für mich ich bekomme meine Werte als String übergeben, finde
aber keine passende Methode den Inhalt auf diese Datentypen zu überprüfen.
Wer könnte mir gedankentechnisch einen Schubs in die richtige Richtung geben.

Gruß

Coolace

Moderiert von user profile iconNarses: Quote-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 21.04.08 20:23 
Du kannst jeden der Datentypen "versuchsweise" mit seiner statischen TryParse-Methode einlesen und bei einem Fehler mit dem nächsten Typ fortfahren. Jetzt musst du dir nur noch eine sinnvolle Reihenfolge überlegen ;) .

Achja: Wenn mehrere Zahlen gleichzeitig übergeben werden können, würde ich den Input erst per String.Split an den Leerzeichen auftrennen.
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: Di 22.04.08 07:06 
Zitat:
als Kommandozeilenparameter übergeben

Deine Werte werden dir als String-Array übergeben.
Je nachdem wie musst du sie eventuell erst noch splitten (String.Split oder RegEx).
Danach würd ich sagen machst du dir 3 Listen oder Felder (1 int, 1 long, 1 double) und je nach Datenbereich (also wenn TryParse true zurückgibt) ordnest du zu.
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Di 22.04.08 15:53 
Hy,

vielen vielen Dank für eure Antwort, das ist nun herausgekommen aber das Programm stürzt nach dem Ausführen aus
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:
using System;
using System.Collections.Generic;
using System.Text;

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int[] izahlen = new int[args.Length];
            long[] lzahlen = new long[args.Length];
            double[] dzahlen = new double[args.Length];
                     

            for (int i=0; i<=args.Length; i++)
            {
                try
                {
                    izahlen[i] = Convert.ToInt16(args);
                }
                catch (FormatException)
                {

                    try
                    {
                        lzahlen[i] = Convert.ToInt64(args);
                    }
                    catch (FormatException)
                    {

                        try
                        {
                            dzahlen[i] = Convert.ToDouble(args);
                        }
                        catch (FormatException)
                        {
                            Console.WriteLine("\nUngültiges Zahlen Format");
                        }
                    }
                }
              

            }
            for (int i = 0; i <= args.Length; i++)
            {
                Console.WriteLine("\nElement:"+i+izahlen[i]);
                Console.WriteLine("\nElement:" + i + lzahlen[i]);
                Console.WriteLine("\nElement:" + i + dzahlen[i]);
            }
        }
    }
}


Danke und Gruß

Coolace

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
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: Di 22.04.08 15:57 
Benutze anstelle von Convert lieber TryParse dann stürzt es auch nicht ab wenn der Datentyp nicht passt
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Di 22.04.08 16:28 
das war aber meine Überlegung das er falsche Formate erkennt um im catch block dann entsprechend wenns passt zurodnet oder hab ich da was falsch verstanden ?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 22.04.08 16:56 
Deshalb ist ein Blick in die SDK-Doku immer nützlich: Dort steht nämlich, was TryParse ist und macht:
Zitat:
Konvertiert die Zeichenfolgendarstellung einer Zahl in die entsprechende 32-Bit-Ganzzahl mit Vorzeichen. Ein Rückgabewert gibt an, ob die Operation erfolgreich abgeschlossen wurde.

Rückgabewert -> Erfolg oder nicht!

Jürgen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 22.04.08 18:22 
Ich habe mich ja schon oben für TryParse ausgesprochen, aber grundsätzlich ist doch nichts gegen seine Methode einzuwenden (wäre eben der 1.1-Weg ;) ). Eine Fehlermeldung wäre allerdings schöner als "stürzt ab".
Zwei Tipps: Die Schleifen laufen zu weit, außerdem wirst du am Ende ziemlich viele Nullen in den Arrays haben - ich würde lieber drei Listen (List<T>) benutzen und diese per Add füllen.
coolace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141



BeitragVerfasst: Mi 23.04.08 17:08 
Hy,

vielen vielen Dank an alle die mir geholfen haben, jetzt funktioniert es. Mit Tryparse ist es sicherlich eleganter aber ich hab meinen Fehler gefunden der eigentlich nicht passieren darf

static void Main(string[] args) // dies liefert ein Charakter Feld zurück und ich hab in der Schleife die Geschichte nicht mit einem Indexzähler versehen, mit args[i] klappts

Dafür hab ich aber Tryparse kennengelernt und werde in Zukunft das verwenden.

Schönen Tag und Gruß

CoolAce