First things first:
SCANF
is not defined by the language.
CHAR
is not defined by the language.
Ok, with that out of the way ...
The scanf()
function returns an integer. That integer is the number of input items assigned or the value of the macro EOF
if an input failure occurs before the first conversion.
You didn't check the return value of the scanf()
call, so you have no idea what happened. Everything might have worked ok, or the input stream might have ended before the first conversion, or (not for %c) there might have been a conversion failure.
Test the return value of scanf()
. Indeed, always test the return value of all <stdio.h> functions.
char ch;
int result = scanf("%c", &ch);
if (result == 1) /* all ok */;
else if (result == 0) /* conversion failure: value of `ch` is indeterminate */;
else if (result == EOF) /* input failure; value of `ch` is indeterminate */;
When the result of the scanf()
call is EOF
, if you want more information about the reason for input failure, you can use feof()
and/or ferror()
.
else if (result == EOF) {
if (feof(stdin)) {
/* no data in input stream */
}
if (ferror(stdin)) {
/* error if input stream (media ejected? bad sector? ...?)
}
}
To answer your question: what will promptChar() return?
It will return an indeterminate value of type char.
You could follow the example of library function that deal with characters and return an int from promptChar()
. That would be the value of the character read cast to unsigned char
or a negative int (EOF
) in case of error. Read the description for fgetc()
, for instance.