im a coding newbie, currently using freepascal to learn. i want to make a simple temperature converter. im struggling at how to validate the input. because im using "real" as var, and i cant validate the input to numbers and negative sign only. i want to write "false input" and repeat to temperature input, if the input contains alphabet/alphanumeric. but when i input the temperature in alphabet/alphanumeric it will just exiting from program. how to do this correctly? is there any solution?
input validation with "real" as the variable
here's my current code
program Fahrenheit_to_Celsius; uses crt; function strtofloat (floatstring : string) : extended; var F: string; floatvalue: extended; C: real; exit: boolean; decision: shortstring; begin clrscr; textattr :=$3; gotoxy (52,1); writeln ('Fahrenheit to Celsius Converter'); repeat write ('Input Fahrenheit: '); readln (F); begin try F := strtofloat ('10 E 2'); except on exception : econverterror do showmessage (exception.message); end; try F := strtofloat ('$FF'); except on exception : econverterror do showmessage (exception.message); end; C := ((F-32)*(5/9)); writeln ('Temperature in Celsius: ', C:0:5); begin writeln; gotoxy ((wherex () + 56), (wherey() - 0)); writeln ('Convert again or exit?'); gotoxy ((wherex () + 31), (wherey() - 0)); writeln ('Input e then press enter to exit or input anything else to convert again'); write ('Decision:'); readln (decision); if (decision = 'e') then exit := true else exit := false; gotoxy ((wherex () + 0), (wherey() - 3)); delline; gotoxy ((wherex () + 0), (wherey() - 0)); delline; end; until exit; end.
It's been a long time since I practiced pascal but I will give you an idea, I think you cannot validate it this way because if you declare the input as
real once the program recive an non valid
input it exits, so what I suggest, is to declare the variable as
string instead, then you create a function to validate it, finally if the function returns
true you convert the
The function should loop through every character in the recieved
string and returns
.( create a variable and increment it every time you catch a character equal to