Autor Beitrag
Snippi der Große
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 08.11.08 16:08 
Ich wollte wie in allen anderen Programmiersprachen, die ich erlenrnt habe, auch in C# einen einfachen Konsolen-Taschenrechner entwickeln. Dazu wollte ich einere ältere C++ - Vorlage benutzen. Die kritischen punkte sind das Einscannen der Zahlen:

...
std::cout << "\n\nGeben Sie bitte die Rechnung ein:\n";
std::cin >> a >> RZ >> b;
switch (RZ)
{
(int) RZ;

...

Bei der C# - Version ist da irgendetwas nicht richtig.
Console.ReadLine kann irgendwie keine Integer-Werte zurückliefern.
Bei Console.Read kommt nur irgendein Schwachsinn heraus.
Gibt's da irgendeine Alternative?

Gruß
Snippi der Kleine
C# - Programmierer im Selbststudium

Post scriptum: Kennt jemand einen Eingabebefehl, der sich überladen lässt?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 08.11.08 16:42 
Willkommen im Forum :welcome: .

user profile iconSnippi der Große hat folgendes geschrieben Zum zitierten Posting springen:
C# - Programmierer im Selbststudium
Tut mir leid, aber ich kann dir jetzt schon sagen, dass das nichts wird. Learning by Doing ist toll, ich lebe auch danach, aber ohne Grundlagen wie das Konvertieren eines Strings in einen Int funktioniert das nicht.

PS:
user profile iconSnippi der Große hat folgendes geschrieben Zum zitierten Posting springen:
Post scriptum: Kennt jemand einen Eingabebefehl, der sich überladen lässt?
Wie meinen :gruebel: ?

_________________
>λ=
Snippi der Große Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 08.11.08 16:57 
Ich hab versucht die strings umzuwandeln.
Aber dann sagt der Compiler immer:
"implizite Typumwandlung von string in int nicht möglich"
Wie auch immer, hier der Quellcode:

...
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
Convert.ToInt32(a);
Convert.ToInt32(rz);
Convert.ToInt32(b);
         switch (rz)
            {

...

Demnächst werde ich dass alles richtig lernen...
An einer echten Schule!

Snippi der Große

Moderiert von user profile iconChristian S.: I- durch C#-Tags ersetzt
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: Sa 08.11.08 17:12 
Hallo und ebenfalls :welcome:

gerade wenn Du von C++ kommst, muss Dir doch die Verwendung einer Methode mit Rückgabewert klar sein: Schon durch Überlegung ist anzunehmen, dass Convert.ToInt32 einen String als Eingabe verlangt und einen Int als Rückgabe liefert. Also muss das doch ungefähr so aussehen:
ausblenden C#-Quelltext
1:
a = Convert.ToInt32(line);					

Zusätzlich muss Dir bewusst werden, dass C# in der Regel streng typisiert arbeitet. Das Umwandeln einer Eingabe bei ReadLine, also eines Strings, in eine Zahl, also int, wird (fast) niemals automatisch erledigt; darauf hat der Compiler hingewiesen.

Ich kann auch nur betonen: Grundlagen, Grundlagen, Grundlagen - z.B. durch OpenBook Visual C#. Außerdem sollte die SDK-Doku/MSDN das wichtigste Hilfsmittel sein; mit dem Index findest Du Erläuterungen, mögliche Eigenschaften, Methoden und Ereignisse sowie Vorgehensweisen und viele, viele Beispiele.

Übrigens sind die Methoden der Convert-Klasse möglichst zu vermeiden, es gibt fast immer bessere Verfahren. Am sichersten ist diese:
ausblenden C#-Quelltext
1:
2:
3:
if (Int32.TryParse(line, out a)) {
   ...
}

Aber lass Dich nicht entmutigen! Jürgen
Snippi der Große Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 11.11.08 18:06 
ok, irdendetwas funktioniert da immer noch nicht. Bei Eingabe der Taste 1 wird nicht die Zahl 1 sonder der zugehörige ASCII - Code 49 gespeichert.
Ich habe mich entschlossen, den gesamten Code hierher zu schreiben:

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.Linq;
using System.Text;

namespace mw
{
    class Abacus
    {
        static void Main()
        {
            Console.Title = "mw software - ABACUS 1.0";
            int a, b, eing;
            string rz;
            long ergebnis;
            double ergebnis_d;
            do
            {
                Console.Write("Bitte die erste Zahl eingeben:");
                a = Console.Read();
                //Console.Write("{0}", a);
                Console.Write("Bitte das Rechenzeichen eingeben:");
                rz = Console.ReadLine();
                //Console.WriteLine("{0}", rz);
                Console.Write("Bitte die zweite Zahl eingeben:");
                b = Console.Read();
                //Console.Write("{0}", b);
                a = Convert.ToInt32(a);
                b = Convert.ToInt32(b);
                switch (rz)
                {
                    case "+": ergebnis = a + b;
                        Console.WriteLine("{0} + {1} = {2}", a, b, ergebnis);
                        break;
                    case "-": ergebnis = a - b;
                        Console.WriteLine("{0} - {1} = {2}", a, b, ergebnis);
                        break;
                    case "*": ergebnis = a * b;
                        Console.WriteLine("{0} x {1} = {2}", a, b, ergebnis);
                        break;
                    case "/": ergebnis_d = a / b;
                        Console.WriteLine("{0} : {1} = {2}", a, b, ergebnis_d);
                        break;
                    default: Console.WriteLine("Ein Fehler ist aufgetreten.");
                        Console.Beep();
                        break;
                }
                eing = Console.Read();
            }
            while (eing != 27);
            
        }
    }
}
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 11.11.08 18:27 
Hallo,

ich hatte Dich auf die SDK-Doku/MSDN hingewiesen. Dort findest Du den Unterschied zwischen Console.ReadLine und Console.Read. Letzteres liefert ein Zeichen als int; wie willst Du damit eine mehrstellige Zahl eingeben? Du kommst also nicht darum herum, tatsächlich eine Zeile als String einzulesen und diesen String zu konvertieren. Ein Verfahren dafür hattest Du schon verwendet (wenn auch falsch), ein anderes hatte ich Dir schon genannt.

Gruß Jürgen
Snippi der Große Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 12.11.08 19:09 
Danke allen, die sich beteiligt haben. Der Abacus ist fertig.

Gruß
Snippi der Große