来自K&R C.
A.6.5算术转换 许多运算符以类似的方式引起转换并产生结果类型.效果是将操作数引入一个公共类型,这也是结果的类型.这种模式称为通常的算术转换.
在下面的代码中,EOF被定义为-1,这是一个带符号的整数常量,然后ch应该转换为int,而while循环应该最终退出,但似乎不会发生!因此Qn.
int main()
{
unsigned char ch;
FILE* fp;
fp = fopen("myfile.txt","r");
while((ch=getc(fp)) != EOF)
{
printf("%c", ch);
}
fclose(fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
getc返回一个int(因为它必须能够保存所有字符值以及EOF).
在您的代码中,您将此值截断为unsigned char分配给它ch.然后你将它扩展为int,这将永远不会导致EOF,因为-1截断变为255,这将成为int255.