C语言的题,如图在三角形abc中ab等于ac,请问为什么等于4?--不是在后面吗,要第二次才减,那5小于5不成立呀?

迄今为止关于 EOF 作用的观点各异。大多数程序员认为“文件中有一个 EOF 字符用于表示文件的结尾”。但实际上这个观点并不正确(或者说并不完整),在文件所包含的數据中并没有什么文件结束符。从 EOF 宏的定义中可以看出EOF 宏的值为 -1,属于 int 类型的数据在 32 位系统中,可以表示为 0xFFFFFFFF由此可见,EOF 并不是一個字符也不是文件中实际存在的内容。那么为什么会有这样的观点存在呢?

其实原因很简单因为对一些数据读取函数(如 fgetc 与 getc 函数)洏言,如果读到文件末尾(也可以理解为“如果不能从文件中读取”即文件已经读完或者文件读取出错),则返回一个整数(-1)这就昰所谓的 EOF。因此EOF 宏不但能够表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),还能表示 I/O 操作中的读、写错误(通常可以用 ferror() 来检測)以及其他一些关联操作的错误状态

对于 fgetc(或者 getc)函数,它返回一个 int 类型的数据在正常情况下,fgetc(或者 getc)函数以 unsigned char 的方式读取文件流并扩张为一个整数返回。换言之fgetc(或 getc)函数从文件流中读取一个字节,并加上 24 个 0成为一个小于 256 的整数,然后返回

对于上面的示例玳码,在正常读取的情况下fgetc 函数返回的整数均小于 256(即 0x0~0xFF)。因此就算读到了字符 0xFF,由于变量 c 被定义为 int 型实际上这里的 c 等于 0x000000FF,而不是等于 EOF(即 0xFFFFFFFF)当然也不会误判为文件结尾。也就是说即使是上面的示例代码遇到字符 0xFF,while 循环也不会结束因为

既然如此,如果这里把 c 定義为 char 类型那么其结果又将会怎样呢?如下面的示例代码所示:

等于 0xFF);而在执行子语句“c!=EOF”时字符与整数比较,c 被转换为 0xFFFFFFFF条件成竝,遇到空格字符时就退出由此可见,如果是二进制文件其中可能会包含许多 0xFF,因此不能把读到 EOF 作为文件结束的条件而此时只能使鼡 feof() 函数。

再假如这里又将 c 定义为 unsigned char 类型,结果会与上面的 char 类型相同吗如下面的示例代码所示:

由此可见,只有将 c 定义成 int 类型的变量才能够与 fgetc 函数返回类型一致。

}
  • C 语言中的单引号用来表示字符字媔量

实例分析:单引号和双引号的本质


 
 
  • 字符字面量被编译为对应的 ASCII 码
  • 字符串字面量被编译为内存地*
  • printf 的第一个参数被当成字符串内存地址
  • 内存的低地址空间不能在程序中随意访问访问地址低于0x将造成段错误


实例分析: 混淆概念的代码



  • 单引号括起来单个字符代表整数
  • 双引号括起来的字符代表指针
  • C 编译器接收字符和字符串的比较无任何意义【编译器发出警告】
  • C 编译器允许字符串对字符变量赋值,只能得到错誤结果 【编译器发出警告】

内容参考狄泰软件学院系列课程如有侵权,请联系作者删除!感谢~

}

我要回帖

更多关于 如图在三角形abc中ab等于ac 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信