| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1923 人关注过本帖
标题:关于EOF的问题
只看楼主 加入收藏
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
10楼已经解释得很清楚了,我就不画蛇添足了

雁无留踪之意,水无取影之心
2008-03-05 20:37
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
谢谢10楼,但是现在又有一个问题了
这里有道题:Write a program to print the value of EOF。
所以我设计了上面的程序,想输出EOF的值,但是照10的说法,就没有办法了。我应该怎么做....
2008-03-05 22:05
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
[bo]以下是引用 [un]lonmaor[/un] 在 2008-3-5 20:31 的发言:[/bo]

ctrl-break/ctrl-c本来就是dos的中止运行功能键。


什么年代了,谁还在dos下编程,即使你用TC我也不相信你在实实在在的DOS中运行。
如果你用的是windows系统,按下这种键时操作系统向你的进程发送一个结束进程的信号,基于控制台的程序也可以加入消息处理,下面的程序你再ctrl-c看看会不会结束:
程序代码:
#include <windows.h>
#include <stdio.h>

BOOL WINAPI myConsoleHandler(DWORD CEvent);
int main()
{
    while(1)
    if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)myConsoleHandler,true)==false)
    {        
        printf("unable to install handler!\n");
        return -1;
    }

    return 0;

}


BOOL WINAPI myConsoleHandler(DWORD CEvent)
{
       
    switch(CEvent)
    {
        case CTRL_C_EVENT:

            MessageBox(NULL,"CTRL+C received!","CEvent",MB_OK);
            break;

        case CTRL_BREAK_EVENT:

            MessageBox(NULL,"CTRL+BREAK received!","CEvent",MB_OK);
            break;   
       
    }
    return true;
}

想输出EOF还不简单,稍作修改就行了:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
   {
       int c;
       while ((c = getchar()) != EOF)
           putchar(c);
           
       printf("%d",c);   
       system("pause");
       return 0;
   }


[[it] 本帖最后由 VxWorks 于 2008-3-5 22:48 编辑 [/it]]

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-03-05 22:47
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
13楼  第一个程序,运行结果.....
 error C2065: 'true' : undeclared identifier
 error C2065: 'false' : undeclared identifier


第二个程序和我写的那个是一样的,不能输出。因为在屏幕上还没有输出值的时候,这个运行的窗口已经关闭了....
2008-03-05 23:23
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
第一个程序重新改了,现在符合c的语法了:
程序代码:
#include <windows.h>
#include <stdio.h>

const BOOL true = 1;
const BOOL false = 0;
BOOL WINAPI myConsoleHandler(DWORD CEvent);
int main()
{
    while(1)
    if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)myConsoleHandler,true)==false)
    {        
        printf("unable to install handler!\n");
        return -1;
    }

    return 0;

}


BOOL WINAPI myConsoleHandler(DWORD CEvent)
{
      
    switch(CEvent)
    {
        case CTRL_C_EVENT:

            MessageBox(NULL,"CTRL+C received!","CEvent",MB_OK);
            break;

        case CTRL_BREAK_EVENT:

            MessageBox(NULL,"CTRL+BREAK received!","CEvent",MB_OK);
            break;   
        
        case CTRL_CLOSE_EVENT:

            MessageBox(NULL,"Program being closed!","CEvent",MB_OK);
            exit(0);
            break;
      
    }
    return true;
}


注意你按ctrl+c或ctrl+beak或点控制台的窗口关闭按钮X时会有小窗口弹出来。

第二个程序怎么可能关闭?你输入什么时关闭的?
除非你输入的是ctrl+c或ctrl+beak。EOF在windows系统中是ctrl+z产生的,帅哥!

不知道你输出EOF干什么,EOF不过是-1的宏定义常量:
#define    EOF    (-1)
打开stdio.h头文件找找。
输出EOF最简单的方法就是:printf("%d",EOF);

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-03-06 13:28
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
终于做出来了,谢谢15楼的同志哈  [bc10]

还有就是第二的程序不是我输错了,
如果是直接输入CTRL+Z的话,确实可以输出EOF的值。
但是我都是先在前面输了几个字母(如:ADSF CTRL+Z)的话,程序就不会结束...
所以我才用CTRL+C的....
2008-03-06 16:36
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
在一个新行输入CTRL+Z后再敲回车才会在stdin中产生一个EOF

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-03-06 18:18
chmlqw
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-10-11
收藏
得分:0 
哦,搞定了
谢谢楼上了......[bc07]
2008-03-06 21:04
快速回复:关于EOF的问题
数据加载中...
 
   



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

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