handles a user response to yes or no questions, with
support for internationalization.
response should be a null-terminated string containing a
user-supplied response, perhaps obtained with
The user's language preference is taken into account per the
environment variables LANG, LC_MESSAGES, and LC_ALL,
if the program has called
to effect their changes.
Regardless of the locale, responses matching ^[Yy] are always
accepted as affirmative, and those matching ^[Nn] are always
accepted as negative.
returns 0 for a recognized negative response ("no"), 1
for a recognized positive response ("yes"), and -1 when the value
of response is unrecognized.
A return value of -1 may indicate either an invalid input, or some
It is incorrect to only test if the return value is nonzero.
can fail for any of the reasons that
can fail; the cause of the error
is not available from errno or anywhere else, but indicates a
failure of the regex engine (but this case is indistinguishable from
that of an unrecognized value of response).
is not required by any standard, but
is available on a few other systems.
implementation looks at only the first character
As a consequence, "nyes" returns 0, and
"ynever; not in a million years" returns 1.
It would be preferable to accept input strings much more
strictly, for example (using the extended regular
expression notation described in
^([yY]|yes|YES)$ and ^([nN]|no|NO)$.
The following program displays the results when
is applied to the string given in the program's command-line argument.