In C# nur Zahlen zulassen?

5 Antworten

https://msdn.microsoft.com/de-de/library/7f0ddtxh(v=vs.110).aspx

Hilft dir das? Ansonsten wär ein Minmalbeispiel ganz hilfreich.

 //Ü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.

0
@Csgoisnotacrime

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
}
0

du könntest zeichen für zeichen durchgehen und prüfen ob der folgende regex ausdruck NICHT zutrifft. ich habe mal ein beispiel gemacht

https://regex101.com/r/PmpnOp/1

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.

0

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.

Woher ich das weiß:Beruf – Software-Entwickler

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:

https://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

LG

Franz | 15

Was möchtest Du wissen?