In C# nur Zahlen zulassen?
Ich schreibe gerade ein Programm und möchte wenn ein Buchstabe oder ein Sonder zeichen eingegeben wird eine Fehlermeldung ausgeben.
Aber ich weiß nicht wie ich das mache, danke schonmal bin noch ein Anfänger;)
5 Antworten
https://msdn.microsoft.com/de-de/library/7f0ddtxh(v=vs.110).aspx
Hilft dir das? Ansonsten wär ein Minmalbeispiel ganz hilfreich.
Nimm int.TryParse statt Convert.ToInt32 . Warte, ich zeige dir das eben
Ersetze
int inputNumber = Convert.ToInt32(Console.ReadLine());
durch
if(!int.TryParse(Console.ReadLine(), out int inputNumber))
{
Console.WriteLine("Ungültige Eingabe");
return; // oder irgendwas anderes
}
du könntest zeichen für zeichen durchgehen und prüfen ob der folgende regex ausdruck NICHT zutrifft. ich habe mal ein beispiel gemacht
Du kanns den Key einlesen lassen, und dessen Wert in einem switch-case auswerten. Dabei kannst du herausfinden welche Taste gedrückt wurde und reagieren.
Ich glaube davon bin ich noch weit entfernt, habe gerade einmal angefangen, unten steht der Code.
Konsole oder grafische Oberfläche?
Grafische Oberfläche: MaskedTextBox
Konsole: Abschluss der Eingabe abwarten oder schon bei Nicht-Zahl Signal geben?
Bei Abwarten:
// using-Direktiven müssen ganz oben stehen
using System;
using System.Globalization;
...
...
...
Double zahl; Boolean zahlIstGültig;
while(true) {
zahlIstGültig = Double.TryParse(Console.ReadLine(), NumberStyles.Any, CultureInfo.CurrentCulture, out zahl);
if (zahlIstGültig) { break; }
// Fehlermeldung
}
Für sofortige Meldung müsstest du die Konsoleneingaben per Console.ReadKey() selbst bearbeiten und zusammensetzen.
Hallo, wo hast du die Eingabe? In einer TextBox?
// TextBox =>
Füge die KeyPress Event hinzu zu diese:
private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if(!char.IsControl(e.KeyChar)&&!char.IsDigit(e.KeyChar)&&(e.KeyChar!= '.'))
{
// Akzeptiere den Key
e.Handled = true;
}
else{
// Falsche Key nur Ziffern erlaubt
//e.Handled = false;, Die Ziffer wird nicht geschrieben
}
// erlaube nur einen Dezimalpunkt
if((e.KeyChar=='.')&&((sender as TextBox).Text.IndexOf('.')>-1))
{
// Akzeptiere den Key
e.Handled = true;
}
}
Oder benutze numericUpDown:
LG
Franz | 15
//Überschrift
Console.WriteLine("############################");
Console.WriteLine("# Mehrwertsteuer-Berechner #");
Console.WriteLine("############################");
//Fragen
Console.Write("Geben Sie Ihren Geldbetrag ein: "); //when input is following after a write use only Console.Write() so it looks better
int inputNumber = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Handelt es sich bei ihrem Produkt um ein Lebensmittel? [j/n]");
//Zuweisung
string zwei = Console.ReadLine().ToLower(); //.ToLower() is only for advanced programmers
if (zwei == "j")
{
Console.WriteLine("Der Steuerbetrag: {0}", inputNumber * 0.10);
}
else if (zwei == "n")
{
Console.WriteLine("Der Steuerbetrag: ", inputNumber * 0.20);
}
else
{
Console.WriteLine("Ungültige Eingabe!");
}
Console.ReadKey();
Der Code, und wenn bei der ersten Frage keine Zahl eingegeben wird, soll eine Fehlermeldung kommen.