提问人:Anagh Basak 提问时间:8/22/2020 最后编辑:anastaciuAnagh Basak 更新时间:8/22/2020 访问量:71
我正在尝试在 eof 和 getchar () 下
I am trying to under eof and getchar ()
问:
在下面给出的一段代码中。每当我输入一组末尾带有 ctrl+z 的字符时,它应该为 getchar() 标记 EOF。它打印所有字符以及末尾的另一个字符,其 ASCII 值为 26。我不知道这个角色的名字。
我希望程序在我放置 ctrl+z 的地方结束。但是,Ctrl+z 仅在输入流为空时才起作用。
有人可以解释为什么它返回这样一个 awkard 字符而不是结束程序吗?
#include<stdio.h>
#include<ctype.h>
int main(){
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}
对不起,我无法上传图像,我也没有办法显示值为 26 的字符。ASCII 表图表显示 26 是 /substitute/。我不知道这意味着什么。 谢谢。
答:
Ctrl+Z 是一个 ASCII 控制字符,如 Ctrl+A、Ctrl+B、Ctrl+@ 等。它不是. 与任何字符都不同:否则,如果返回该值,则无法知道它是否已到达文件末尾或已读取该字符。Ctrl+Z 的 ASCII 值为 26。您看到的是您输入的内容。EOF
EOF
getchar()
在您的操作系统(大概是 Windows)上,行首的 Ctrl+Z 表示终端已完成键入。(更准确地说,我认为代码位于从终端读取的库函数中,而不是从终端本身读取。但我可能在细节上错了,因为我不是 Windows 专家。它只在一行的开头起作用,因为这是从终端读取的库代码的工作方式。在行首键入 Ctrl+Z 时,会看到文件结束条件并返回 .getchar()
EOF
当您在行的开头键入 Ctrl+Z 时,它将被视为普通字符。Windows 将其打印为“奇怪的字形”,用于指示不可打印的字符。
大多数 ASCII 字符的官方含义很久以前就被遗忘了。有一个 ASCII 控制字符,用于表示“文件结束”,或者更准确地说是“传输结束”,即 Ctrl+D,它在 Unix 操作系统系列中仍然存在,当在终端上的行首输入时表示“输入结束”,就像 Windows 上的 Ctrl+Z 一样。Ctrl+Z与Windows上的文件结尾的关联来自不同的操作系统历史系列,主要来自DEC操作系统,Microsoft的DOS和Windows从中汲取了灵感。
与您的问题不完全相同,但我推荐这个答案,这应该有助于消除您对 .EOF
评论