我附上了一段我不完全理解的c代码的图片。我知道getchar
从标准输出返回下一个字符putchar
并将该字符放在标准输出上,但我不完全理解它EOF
是什么以及这段代码到底在做什么。另外,我不明白如何像在 if 语句中那样添加或减去字母。
4 回答
EOF 表示文件结束。当您读取/读取文件以检测文件是否已结束并且没有更多字符要读取时,使用此选项。您可以添加/减去 char 数据类型值,因为它基本上是一个 8 位内存位置,并且 char 通常存储为 ASCII。谷歌 ASCII 并了解数字如何映射到字符,然后您就会了解如何对字符进行减法运算。
基本上,那里编写的代码从标准输入输入字符,如果值在 A 和 Z 之间,则将它们转换为小写并打印回来。
顺便说一句,这不是伪代码。您附在此处的照片是实际工作的 C 代码。
一些澄清:EOF =文件结尾。每个文件的末尾都有这个字符,表示文件结束
在 c 字符中表示为 int 来自 ascii 表(http://www.asciitable.com/)。因此,写“A”与写 65 相同。C 在两者之间没有区别。
这会从文件中读取字符(直到到达表示“文件结束”的 EOF 字符)。对于大写字符(在“A”和“Z”之间),它将它们转换为小写,然后打印该字符,否则它只打印原始字符。
要了解字符运算,您可能需要查看显示通常分配给字符的数值的ascii 表。
(我说“通常”是出于过度谨慎,因为你说这是伪代码,但对我来说它看起来像完全有效的 C。)
首先,除非您更改c
to的声明,否则代码将无法正常工作int
。该函数getchar()
返回一个int
,而不是一个char
。大多数情况下,该 int 仅包含一个 8 位值,该值与刚从输入中获取的字符相同。当没有更多输入时,它包含特殊的整数值EOF
,它不同于任何字符。
此代码假定 A 到 Z 和 a 到 z 的整数值是连续的。这对于 ASCII 和其他代码是正确的,但不是通用的。如果为真,则从大写字符中减去“A”将生成 0 到 25 之间的整数,然后将“a”添加到该整数将生成相应的小写字符。