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.