How to resolve the algorithm Keyboard input/Obtain a Y or N response step by step in the Haskell programming language
How to resolve the algorithm Keyboard input/Obtain a Y or N response step by step in the Haskell programming language
Table of Contents
Problem Statement
Obtain a valid Y or N response from the keyboard. The keyboard should be flushed, so that any outstanding key-presses are removed, preventing any existing Y or N key-press from being evaluated. The response should be obtained as soon as Y or N are pressed, and there should be no need to press an enter key.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Keyboard input/Obtain a Y or N response step by step in the Haskell programming language
The provided Haskell code is designed to read a single character from the user's input and interpret it as a confirmation or denial. It does this by repeatedly reading characters until it encounters either 'Y', 'N', 'y', or 'n', and then interpreting the input accordingly.
A step-by-step explanation of the code:
-
The
hFlushInput
function is defined to consume all pending input from a specified file handle. This ensures that any characters entered by the user before the program prompts for input are discarded. -
The
yorn
function is defined to read a single character from the user's input and interpret it as either 'Y' (yes) or 'N' (no). It handles both uppercase and lowercase input. If the input character is not recognized, it recursively callsyorn
until a valid character is entered. -
The
main
function is the entry point of the program. It first sets the buffering mode of the standard output (stdout) and standard input (stdin) toNoBuffering
, which means that characters will be written to the console immediately and input will be read character by character. -
It then displays the prompt "Press Y or N to continue: " to the user.
-
The
hSetEcho stdin False
call disables character echoing for stdin, which means that the characters entered by the user will not be displayed on the console. -
The
hFlushInput stdin
call is made to consume any pending input from stdin, ensuring that the user's response is not affected by any previous input. -
The
yorn
function is called to read the user's input and interpret it as a confirmation or denial. The result is stored in theanswer
variable. -
Finally, the program prints the character entered by the user to the console.
In summary, this code is a simple command-line program that prompts the user for a single character ('Y' or 'N') and interprets it as a confirmation or denial. It ensures that the user's input is not influenced by previous input and that the characters entered are not echoed to the console.
Source code in the haskell programming language
import System.IO
hFlushInput :: Handle -> IO ()
hFlushInput hdl = do
r <- hReady hdl
if r then do
c <- hGetChar hdl
hFlushInput hdl
else
return ()
yorn :: IO Char
yorn = do
c <- getChar
if c == 'Y' || c == 'N' then return c
else if c == 'y' then return 'Y'
else if c == 'n' then return 'N'
else yorn
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
putStr "Press Y or N to continue: "
hSetBuffering stdin NoBuffering
hSetEcho stdin False
hFlushInput stdin
answer <- yorn
putStrLn [answer]
You may also check:How to resolve the algorithm Narcissistic decimal number step by step in the D programming language
You may also check:How to resolve the algorithm First perfect square in base n with n unique digits step by step in the D programming language
You may also check:How to resolve the algorithm Abundant, deficient and perfect number classifications step by step in the XPL0 programming language
You may also check:How to resolve the algorithm Synchronous concurrency step by step in the Pony programming language
You may also check:How to resolve the algorithm Integer comparison step by step in the AWK programming language