在C中将值存储在int中与从getchar函数返回的char中的区别 [英] Difference between storing the value in int and char returned from getchar function in C

查看:0
本文介绍了在C中将值存储在int中与从getchar函数返回的char中的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在阅读Dennis Ritchie的书时,我发现将getchar()函数在C中返回的值存储在整型变量中比存储在字符型变量中更好。声明的原因是字符类型变量不能存储EOF的值。在实际实现时,将返回存储在char类型变量中并不困难。而getchar()函数最初返回的是字符还是字符的ascii值?

推荐答案

EOF的值始终定义为-1。

这很好用,因为所有ASCII代码都是正的,所以它不可能与任何真实角色的表示形式冲突。

不幸的是,C有一个非常奇怪的功能,可能会造成麻烦。没有定义字符变量的可能值的范围必须是什么。在某些系统上,它是-128到+127,这很好;但在其他系统上,它是0到+255,对于正常的ASCII值来说很好,但对于EOF-1就不那么热了。

首先,保存getchar()的返回值的变量必须是intEOFgetchar()out of band返回值:它不同于getchar()可以返回的所有可能的字符值。(在现代系统上,它不反映文件中存储的任何实际文件结束字符;它是没有更多可用字符的信号。)getchar()的返回值必须存储在大于char的变量中,以便它可以保存所有可能的char值和EOF。

如果将getchar()的返回值分配给字符,则可能出现两种失败模式。

  • 如果typecharsigned,并且EOF定义为-1,则带十进制值255(<2-4]>中的‘377’或‘xff’)的字符将被符号扩展,并与EOF比较等于EOF,提前终止输入。t
  • 如果类型charunsigned,则实际的EOF值将被截断(丢弃其高阶位,可能会导致2550xff),不会被识别为EOF,从而实际上是无限输入。
但是,如果字符是带符号的并且输入的都是7位字符,错误可能会在很长一段时间内不被检测到。(普通字符是有符号的还是无符号的,由实现定义。)

引用:

K&;R1秒1.5第14页

K&;R2秒1.5.1第16页

ISO SEC

6.1.2.5,秒7.9.1,秒7.9.7.5

H&S SEC。5.1.3第116页,秒15.1,秒15.6

CT&P SEC。5.1第70页每秒11页157页

通常,最好将getchar()的结果存储在int中,以确保正确处理EOF

这篇关于在C中将值存储在int中与从getchar函数返回的char中的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆