标题:关于EOF的几个问题。
只看楼主
陨落
Rank: 2
等 级:论坛游民
帖 子:36
专家分:16
注 册:2009-6-27
结帖率:100%
已结贴  问题点数:40 回复次数:12 
关于EOF的几个问题。
EOF的值到底是什么。为什么有时候它等于-1。有时候又是ctrl+z或者alt+26.
这到底是怎么回事。EOF到底又是什么。我真的很想明白。我只知道它是文件结束符
还有这段代码
#include <stdio.h>
main()
{
    int b;
    while( b = getchar()!= EOF){
     putchar(b);
     getch();
    }
}
运行后的图像

里面那个圆圈圈又是什么。
我在ASCII代码转换里看见了它对应的代码是001
这是怎么一回事啊。
请大家赐教、小弟感激不敬。
搜索更多相关主题的帖子: EOF 
2009-08-06 00:13
Soulofghost
Rank: 1
等 级:新手上路
帖 子:10
专家分:5
注 册:2008-8-10
得分:0 
while( (b = getchar()) != EOF)

换成这个应该就好了
2009-08-06 00:16
邶风
Rank: 5Rank: 5
等 级:职业侠客
帖 子:287
专家分:335
注 册:2009-1-20
得分:10 
while( b = getchar()!= EOF){
和while( (b = getchar()) != EOF)
事不同的

由于赋值的关系 上面 先是判定getchar()是否不等于EOF而得到一个布尔值 要么是1要么是0 然后传给b 所以b要么是0要么是1
下面就不一样了 b值为getchar() 然后判定b是不是EOF


#include
2009-08-06 00:35
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:10 
用代码测试:
程序代码:
#include<stdio.h> 
#include<conio.h> 
main() 
{ 
    char ch; 
    ch=EOF; 
    printf("EOF=%d\n",ch); 
    ch=getchar();        /*在这里输入【Ctrl+Z】*/ 
    printf("When I Use getchar()...\n"); 
    printf("[Ctrl+Z]=%c=%d\n",ch,ch); 
    if(ch==EOF) 
        printf("[Ctrl+Z]=EOF\n"); 
    else 
        printf("[Ctrl+Z]!=EOF\n"); 
    ch=getch();          /*在这里输入【Ctrl+Z】*/ 
    printf("When I Use getch()...\n"); 
    printf("[Ctrl+Z]=%c=%d\n",ch,ch); 
    if(ch==EOF) 
        printf("[Ctrl+Z]=EOF\n"); 
    else 
        printf("[Ctrl+Z]!=EOF\n"); 
}


[[it] 本帖最后由 CrystalFan 于 2009-8-6 00:57 编辑 [/it]]

1.JPG (12.18 KB)
2009-08-06 00:48
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
当使用getchar()时, 【Ctrl+Z】=-1=EOF
当使用getch()时, 【Ctrl+Z】=26≠EOF
2009-08-06 00:56
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
第二个问题

运行下面的测试代码你就会发现,那个笑脸是当b=1时,putchar(b)的结果。

程序代码:
main()
{
int b=1;
putchar(b);
printf(" b=%d\n",b); 
while( b = getchar()!= EOF){ 
     printf("b=%d\n",b); 
     putchar(b); 
     getch(); 
    }
}


[[it] 本帖最后由 CrystalFan 于 2009-8-6 01:05 编辑 [/it]]
2009-08-06 01:04
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
而且你会发现,用getchar()时,【Enter】=1;
              用getch()时,  【Enter】=13。
2009-08-06 01:07
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
得分:0 
你的代码应该改为2、3楼所说的样子
2009-08-06 01:08
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
以下是引用CrystalFan在2009-8-6 01:07的发言:而且你会发现,用getchar()时,【Enter】=1;              用getch()时,  【Enter】=13。
你是怎么得到这个结论的?

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-06 07:55
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:10 
EOF的值是-1,这是没有问题的。
只不过在标准输入上这个意思得用Ctrl+Z表示。就好像bye的意思在某些环境下用88表示一样。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2009-08-06 08:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281755-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.206355 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved