为什么Ctrl-J和Ctrl-M在OSX上的c编程中返回10?

时间:2014-10-28 13:44:05

标签: c macos

考虑此帖子 What is EOF in the C programming language?

答案是EOF(Ctrl-D)导致getchar返回-1

  • 我的问题是在OSX上c表示Ctrl-J和Ctrl-M是什么,为什么getchar使用与上面链接相同的代码返回10?
  • 还有哪些其他快捷方式(Ctrl-somthing / Cmd-something)导致getchar变成静态预定义数字?

2 个答案:

答案 0 :(得分:3)

Ctrl-J是换行控制字符的快捷方式,具有字符代码10. Here是包含其他控制字符的页面

我此时不知道为什么Ctrl-M(ASCII值13)返回10但是假设它是由于它在功能上与换行符相似。

EOF返回-1的原因是因为在大多数系统上它的值为-1。

其他一些定义的字符:
Ctrl-G:7
Ctrl-I:9
...
Ctrl-V:22

答案 1 :(得分:1)

stdin通常采用文字模式。在文本模式下读/写时,每个操作系统发生有关行结尾的各种转换。 Crtl-M就是其中之一 - 它被转换为10.如果IO处于二进制模式,则不会进行转换。

控制台将各种键盘组合映射到各种char和动作(如Ctrl-D - > EOF)。创建的各种char肯定包含大多数值0到127.由于这些值通常映射到ASCII,前32个值(Ctrl- @,CTRL-A,CTRl-B,... .ctrl-_),它们可能没有图形表示

注意:请注意在getchar()返回EOF后再次调用{1}}时返回的内容。期望它能够立即再次返回EOF,而无需等待任何额外的按键操作。 (Ctrl-D)设置条件,而不是char。