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