我正在阅读C编程语言书,在下面给出的代码中,我不知道如何在这里获得EOF?而且我还没有得到什么是EOF?是字符,整数还是条件?如果是条件,那么请解释.谢谢.
#include
int main(int argc, char *argv[]){
int c;
while((c = getchar()) != EOF){
printf("%d", c != EOF);
putchar(c);
}
printf("\n%d\n", c != EOF);
}
Steve Summit..
5
该getchar
函数可以返回任何可以在系统上表示的可能字符,以及另外一个额外的,特殊的"带外"返回值,表示不再返回任何字符.该值由符号宏标识符引用EOF
.在后面的某处
通常有一个定义
#define EOF (-1)
该值不一定是-1,但这符合我们的目的.(我们不必知道或关心实际价值是什么,因为我们总是指的是EOF
,使我们与实际价值隔离开来.)
无论价值EOF
多少,都保证不会与任何实际角色相同.因此,如果getchar
返回除了之外的值EOF
,则它是已读取的实际字符.但如果它返回EOF
,则表明输入流已到达文件结尾,表示不再需要读取字符.
所以EOF
绝对不是一个角色.它是一个整数,其值不同于任何值char
.我不会称之为"条件",尽管你使用类似的代码测试它
if(c == EOF)
要么
if(c != EOF)
我会说那些表达式c == EOF
和c != EOF
条件.
它特别令人困惑,因为通常会有一个特殊字符,您可以在键盘上键入以生成文件结束指示.在Windows上它是control-Z; 在Unix和其他系统上它是控制-D.但这并不意味着EOF
是控制-Z在Windows系统上,或者是在Unix系统上控制d.这些字符由终端驱动程序处理,并转换为在几个额外的处理和解释级别之后getchar
返回的指示EOF
.但要证明一个方式EOF
是不是控制-Z或控制d是观察,当你使用getchar
或getc
从文件中读取,你会得到一个EOF
在文件结束,即使没有一个输入控制字符的指示在这种情况下的键盘.
最后,这个讨论提醒我们使用int
变量来携带返回值的重要性getchar
.您引用的代码正确声明
int c;
然后使用该变量c
来保存返回的值getchar
.为什么要在int
这里使用?因为getchar
返回字符,并且因为c
是一个字符,所以声明它不会更有意义
char c;
这 似乎有道理,但实际上是非常错误的.类型char
可以包含系统可以表示的任何字符.但要记住,getchar
可以返回任何字符值,加上该EOF
值.如果将getchar
返回值分配给类型变量char
,则最终会"无意中将"映射到实际字符值,从而"刮掉"EOF指示.接下来发生的事情是要么将实际字符(通常是ÿ)映射到EOF
并且在读取时错误地停止读取,要么映射EOF
到实际字符,因此从不检测它,因此进入无限循环而不是停止-of文件.
1> Steve Summit..:
该getchar
函数可以返回任何可以在系统上表示的可能字符,以及另外一个额外的,特殊的"带外"返回值,表示不再返回任何字符.该值由符号宏标识符引用EOF
.在后面的某处
通常有一个定义
#define EOF (-1)
该值不一定是-1,但这符合我们的目的.(我们不必知道或关心实际价值是什么,因为我们总是指的是EOF
,使我们与实际价值隔离开来.)
无论价值EOF
多少,都保证不会与任何实际角色相同.因此,如果getchar
返回除了之外的值EOF
,则它是已读取的实际字符.但如果它返回EOF
,则表明输入流已到达文件结尾,表示不再需要读取字符.
所以EOF
绝对不是一个角色.它是一个整数,其值不同于任何值char
.我不会称之为"条件",尽管你使用类似的代码测试它
if(c == EOF)
要么
if(c != EOF)
我会说那些表达式c == EOF
和c != EOF
条件.
它特别令人困惑,因为通常会有一个特殊字符,您可以在键盘上键入以生成文件结束指示.在Windows上它是control-Z; 在Unix和其他系统上它是控制-D.但这并不意味着EOF
是控制-Z在Windows系统上,或者是在Unix系统上控制d.这些字符由终端驱动程序处理,并转换为在几个额外的处理和解释级别之后getchar
返回的指示EOF
.但要证明一个方式EOF
是不是控制-Z或控制d是观察,当你使用getchar
或getc
从文件中读取,你会得到一个EOF
在文件结束,即使没有一个输入控制字符的指示在这种情况下的键盘.
最后,这个讨论提醒我们使用int
变量来携带返回值的重要性getchar
.您引用的代码正确声明
int c;
然后使用该变量c
来保存返回的值getchar
.为什么要在int
这里使用?因为getchar
返回字符,并且因为c
是一个字符,所以声明它不会更有意义
char c;
这 似乎有道理,但实际上是非常错误的.类型char
可以包含系统可以表示的任何字符.但要记住,getchar
可以返回任何字符值,加上该EOF
值.如果将getchar
返回值分配给类型变量char
,则最终会"无意中将"映射到实际字符值,从而"刮掉"EOF指示.接下来发生的事情是要么将实际字符(通常是ÿ)映射到EOF
并且在读取时错误地停止读取,要么映射EOF
到实际字符,因此从不检测它,因此进入无限循环而不是停止-of文件.
@gunjanpatait运行程序时,尝试在Windows系统上键入"ABC
",或在Unix,Linux或Mac系统上键入"ABC " .