我正在尝试下eof和getchar()
I am trying to under eof and getchar ()
在下面给出的代码段中。每当我在末尾输入一组带有 ctrl+z 的字符时,应该将 EOF 标记为 getchar()。它打印所有字符以及最后一个 ASCII 值为 26 的字符。我不知道这个字符的名称。
我希望程序在我按下 ctrl+z 的地方结束。然而,Ctrl+z 仅在输入流为空时有效。
有人可以解释为什么它返回这样一个尴尬的字符而不是结束程序吗?
#include<stdio.h>
#include<ctype.h>
int main(){
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}
抱歉,我无法上传图片,我也无法显示值为 26 的字符。ASCII table 图表显示 26 是 /substitute/。我不知道那是什么意思。
谢谢。
Ctrl+Z 与 Ctrl+A、Ctrl+B、Ctrl+@ 等类似 ASCII control character。不是EOF
。 EOF
不同于任何字符:否则,如果 getchar()
返回该值,您无法知道它是否已到达文件末尾或已读取该字符。 Ctrl+Z 的 ASCII 值是 26。您看到的是您输入的内容。
在您的操作系统上(Windows,大概),行首的 Ctrl+Z 向终端指示您已完成输入。 (更准确地说,我认为代码在从终端读取的库函数中,而不是从终端本身读取的。但我在细节上可能是错误的,因为我不是 Windows 专家。)它只是在一行的开头工作,因为这就是从终端读取的库代码的工作方式。当您在行首键入 Ctrl+Z 时,getchar()
会看到 end-of-file 条件并且 returns EOF
.
当您在行首键入 Ctrl+Z not 时,它被视为普通字符。 Windows 将其打印为“奇怪的字形”,用于指示不可打印的字符。
大多数 ASCII 字符的官方含义很久以前就被遗忘了。有一个 ASCII 控制字符曾经表示“文件结尾”,或者更准确地说“Windows 上的 end of transmission”, which is Ctrl+D, and it survives in the Unix operating system family to mean “end of input” when entered at the beginning of a line on a terminal, much like Ctrl+Z on Windows. The association of Ctrl+Z with end-of-file 来自不同的操作系统历史系列,主要来自 DEC,Microsoft 的 DOS 和 Windows 从中汲取灵感。
与您的问题不完全相同,但我建议 这应该有助于消除您对 EOF
的困惑。
在下面给出的代码段中。每当我在末尾输入一组带有 ctrl+z 的字符时,应该将 EOF 标记为 getchar()。它打印所有字符以及最后一个 ASCII 值为 26 的字符。我不知道这个字符的名称。
我希望程序在我按下 ctrl+z 的地方结束。然而,Ctrl+z 仅在输入流为空时有效。
有人可以解释为什么它返回这样一个尴尬的字符而不是结束程序吗?
#include<stdio.h>
#include<ctype.h>
int main(){
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}
抱歉,我无法上传图片,我也无法显示值为 26 的字符。ASCII table 图表显示 26 是 /substitute/。我不知道那是什么意思。 谢谢。
Ctrl+Z 与 Ctrl+A、Ctrl+B、Ctrl+@ 等类似 ASCII control character。不是EOF
。 EOF
不同于任何字符:否则,如果 getchar()
返回该值,您无法知道它是否已到达文件末尾或已读取该字符。 Ctrl+Z 的 ASCII 值是 26。您看到的是您输入的内容。
在您的操作系统上(Windows,大概),行首的 Ctrl+Z 向终端指示您已完成输入。 (更准确地说,我认为代码在从终端读取的库函数中,而不是从终端本身读取的。但我在细节上可能是错误的,因为我不是 Windows 专家。)它只是在一行的开头工作,因为这就是从终端读取的库代码的工作方式。当您在行首键入 Ctrl+Z 时,getchar()
会看到 end-of-file 条件并且 returns EOF
.
当您在行首键入 Ctrl+Z not 时,它被视为普通字符。 Windows 将其打印为“奇怪的字形”,用于指示不可打印的字符。
大多数 ASCII 字符的官方含义很久以前就被遗忘了。有一个 ASCII 控制字符曾经表示“文件结尾”,或者更准确地说“Windows 上的 end of transmission”, which is Ctrl+D, and it survives in the Unix operating system family to mean “end of input” when entered at the beginning of a line on a terminal, much like Ctrl+Z on Windows. The association of Ctrl+Z with end-of-file 来自不同的操作系统历史系列,主要来自 DEC,Microsoft 的 DOS 和 Windows 从中汲取灵感。
与您的问题不完全相同,但我建议 EOF
的困惑。