Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 03.11.16
Kronenchakra Kronenchakra ist offline
Gesperrter Benutzer
 
Registriert seit: Feb 2016
Ort: 2100 Österreich
Beiträge: 313
Kronenchakra befindet sich auf einem aufstrebenden Ast
Standard Code Snippets - Eingabeprüfung leicht gemacht

Die Prüfung von Eingabewerten ist lästig, aber wichtig.
Also muß wieder eine Bibliotheksfunktion geschaffen (oder gefunden, wie hier) werden.
Ich nenne diese ValidRange() - Wertebereichsüberprüfung.
Die Parameter sind, denke ich, selbsterklärend.
Code:
int ValidRange(int aVal,   // zu überprüfender Wert
               int aMin,   // Minimum
               int aMax,   // Maximum
               string aMsg="Eingabewert") // Text für die Fehlermeldung

gibt gültigen Wert im Bereich von aMin bis aMax zurück
Beispiel: Eingabe einer integer Zahl zwischen 1 und 3
Die Verwendung im Programm:
Code:
input int inp_Number = 3;     // Number of LR Channels (1 - 3)

// die Eingabeprüfung
int Number = ValidRange(inp_Number,1,3, "Anzahl Channels");

// kurze Variante, Text "Eingabewert" wird defaultmäßig verwenden 
int Number = ValidRange(inp_Number,1,3);
Die Bibliotheksfunktion Variante MessageBox:
Code:
int ValidRange(int aVal, int aMin, int aMax, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin) 
   {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu klein. Wird auf "+IntegerToString(aMin)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMin);     // Minimalwert zurückgeben
   }
  if(aVal>aMax) 
   {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu groß. Wird auf "+IntegerToString(aMax)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMax);     // Maximalwert zueückgeben
   }
  return(aVal);         // Wert war im gültigen Bereich
}
Die Bibliotheksfunktion Variante Print:
Code:
int ValidRange(int aVal, int aMin, int aMax, string aMsg="Eingabewert")
{
   if(aVal<aMin) {Print(aMsg+" ",aVal, " zu klein. Wird auf ",aMin, " korrigiert"); return(aMin);}
   if(aVal>aMax) {Print(aMsg+" ",aVal, " zu groß. Wird auf " ,aMax, " korrigiert"); return(aMax);}
   return(aVal);
}
Ja, es ist trivial, aber nützlich
Kann man natürlich auch für long oder double (mit gleichem Namen, der Compiler erkennt das) definieren.

Hier die long Variante:
Code:
long ValidRange(long aVal, long aMin, long aMax, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin) 
   {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu klein. Wird auf "+IntegerToString(aMin)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMin);     // Minimalwert zurückgeben
   }
  if(aVal>aMax) 
   {
      MessageBox(aMsg+" "+IntegerToString(aVal)+" zu groß. Wird auf "+IntegerToString(aMax)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMax);     // Maximalwert zueückgeben
   }
  return(aVal);         // Wert war im gültigen Bereich
}
Bei double benötigen wir noch die Anzahl Dezimalstellen als weiteren Parameter:
Code:
double ValidRange(double aVal, double aMin, double aMax, int aDigits=3, string aMsg="Eingabewert")
{
  int flags=MB_OK | MB_ICONWARNING;    // bitweises OR
  if(aVal<aMin) 
   {
      MessageBox(aMsg+" "+DoubleToString(aVal,aDigits)+" zu klein. Wird auf "+DoubleToString(aMin,aDigits)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMin);     // Minimalwert zurückgeben
   }
  if(aVal>aMax) 
   {
      MessageBox(aMsg+" "+DoubleToString(aVal,aDigits)+" zu groß. Wird auf "+DoubleToString(aMax,aDigits)+" korrigiert","* EINGABEFEHLER *",flags); 
      return(aMax);     // Maximalwert zueückgeben
   }
  return(aVal);         // Wert war im gültigen Bereich
}
Damit wird Eingabeprüfung zur einfachen Übung.