第一件事:
SCANF
不是由语言定义的。
CHAR
不是由语言定义的。
好的,不碍事...
该scanf()
函数返回一个整数。EOF
如果在第一次转换之前发生输入失败,则该整数是分配的输入项的数量或宏的值。
你没有检查scanf()
调用的返回值,所以你不知道发生了什么。一切可能都正常,或者输入流可能在第一次转换之前已经结束,或者(不是 %c)可能发生了转换失败。
测试返回值scanf()
。确实,始终测试所有 <stdio.h> 函数的返回值。
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 */;
当scanf()
调用结果为 时EOF
,如果您想了解有关输入失败原因的更多信息,您可以使用feof()
和/或ferror()
。
else if (result == EOF) {
if (feof(stdin)) {
/* no data in input stream */
}
if (ferror(stdin)) {
/* error if input stream (media ejected? bad sector? ...?)
}
}
要回答您的问题:what will promptChar() return?
它将返回 char 类型的不确定值。
您可以按照处理字符并从promptChar()
. 如果出现错误,那将是读取的字符的值unsigned char
或负的 int ( EOF
)。例如,阅读 的描述fgetc()
。