当为命令控制台编程C时,当你有一个试图使用SCANF向用户输入CHAR变量的函数,并且用户输入CTRL+Z(EOF)并命中输入时会发生什么?
例如:
char promptChar()
{
char c;
printf("Enter a character: ");
scanf("%c", &c);
return c;
}
Run Code Online (Sandbox Code Playgroud)
如果用户键入CTRL+Z并命中输入,那么promptChar()会返回什么?因为如果我理解EOF,它就是一个int.
pmg*_*pmg 11
首先要做的事情:
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 */;
Run Code Online (Sandbox Code Playgroud)
当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? ...?)
}
}
Run Code Online (Sandbox Code Playgroud)
回答你的问题: what will promptChar() return?
它将返回char类型的不确定值.
你可以按照库函数的例子来处理字符并从中返回一个int promptChar().这将是字符读取的值unsigned char或EOF错误的负int().fgetc()例如,阅读说明.