6 Stimmen

C#-Konsole Benutzereingabe

Ok, ich möchte zuerst sagen, dass ich kein Student bin, also hat diese Frage nichts mit Hausaufgaben zu tun. Ich versuche, C# zu lernen, weil das Unternehmen, für das ich arbeiten möchte, es verwendet. Ich habe gehört, dass C# sehr ähnlich zu Java ist, also benutze ich mein Java-Buch, das Übungsprobleme hat, um C# zu üben. Hier ist meine Frage, ich versuche, ein einfaches Programm zu machen, dass der Benutzer 3 Noten eingibt und es speichert sie in einem Array und zeigt dann die drei Noten, die eingegeben wurden. Das Problem ist, dass seine nicht die Noten zu speichern. Es zeigt jedoch eine zufällige Zahl an, z.B. wenn ich 34, 44 und 54 eingebe, gibt es 51 zurück. Hier ist mein Code und vielen Dank an alle:

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

namespace Practice1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] test = new int[4];

            int i = 1;

            for (i = 1; i <= 3; i++)
            {
                Console.WriteLine("Please enter test " + i);
                test[i] = Console.Read();
                Console.ReadLine();

            }
            for (i = 1; i <=3; i++)
            {
                Console.WriteLine(test[i]);
                Console.ReadLine();
            }
        }
    }
}

9voto

agent-j Punkte 26429

Ihr Problem ist hier:

test[i] = Console.Read();

Damit wird ein Zeichen (ein ganzzahliger Zeichencode) in das Testfeld eingefügt.

Stattdessen tun

test[i] = int.Parse(Console.ReadLine());

Edita: Wenn Sie nicht sicher sind, dass der Benutzer eine analysierbare Ganzzahl eingibt, z. B. "sechs", können Sie ein try/catch verwenden (wenn Sie wissen wollen, warum die Analyse nicht funktioniert) oder int.TryParse, das true zurückgibt, um den Erfolg anzuzeigen und die analysierte Ganzzahl einer Variablen, einem Feld oder einem Array-Index zuweist:

if(int.TryParse(Console.ReadLine(), out test[1])
   Console.WriteLine("Successfully parsed integer");
else
   Console.WriteLine("Please enter an integer.");

2voto

Eric J. Punkte 143512

Console.Read() gibt den ASCII-Wert der eingegebenen Taste zurück. Wenn Sie zum Beispiel "A" eingeben, erhalten Sie den Wert 65, den ASCII-Code für "A".

Sie müssen Ihre Zeichenkette in eine ganze Zahl umwandeln:

for (i = 0; i < 4; i++)
{
    Console.WriteLine("Please enter test " + i);
    string input = Console.ReadLine();
    int value;
    bool success = int.TryParse(input, out value);
    if (success)
    {
        test[i] = value
    }
    else
    {
        // Show an error message that the user must enter an integer.
    }

    Console.ReadLine();

}                

Beachten Sie auch, dass Arrays sind indiziert beginnend mit 0 in C#, nicht mit 1 wie Ihr Code annimmt.

Alternativ dazu können Sie auch Konsole.Lesen (), die die ganzzahlige Darstellung des eingegebenen Zeichens zurückgibt, bestätigt, dass das Zeichen tatsächlich eine Zahl ist, und wandelt den ASCII-Code in die entsprechende Zahl um.

2voto

NominSim Punkte 8329

Von der docs Console.Read() "Liest das nächste Zeichen aus dem Standard-Eingabestrom".

Sie wollen den nächsten Integer, also etwas wie

bool cont = false;
int val = 0;
do
{
    cont = int.TryParse(Console.ReadLine(), out val);
    if(!cont){Console.WriteLine( "please enter a real number you fool" );}
} while (!cont);

Sollte funktionieren.

2voto

eyossi Punkte 4180
        int[] test = new int[3];

        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine("Please enter test " + i + 1);
            test[i] = Int.Parse(Console.ReadLine());
        }
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(test[i]);
            Console.ReadLine();
        }

Wie Sie sehen können, beginnen Arrays bei Index 0, so dass es nicht notwendig ist, int[4] zu definieren (ein int mehr als erforderlich), und Sie müssen eine Schleife von Index 0 bis Länge-1 durchführen

2voto

Adam Gritt Punkte 2624

Das Problem ist, dass Sie sich in die Figur hineinlesen. Die "51", die Sie sehen, ist also der dezimale (Basis 10) ASCII-Wert für die Zahl 3. Was Sie tun müssen, ist Folgendes:

string result = Console.ReadLine();
int grade = 0;
int.TryParse(result, out grade)
test[i] = grade;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X