| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1527 人关注过本帖
标题:有关EOF的
只看楼主 加入收藏
窗前的茶
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:24
专家分:34
注 册:2016-1-20
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:11 
有关EOF的
这是一个统计字符的程序
程序代码:
#include <stdio.h> 
int main() 
{
     char c; 
     int letter, space, digit, other;
     printf("Input: \n");
     letter = 0; space = 0; digit = 0; other = 0;
     while ((c = getchar()) != EOF)  //没怎么理解
         {
         if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'))
             letter++;
         else if (c == ' ')
             space++;
         else if ('0' <= c && c <= '9')
             digit++;
         else
             other++;
         }
    printf("Output:\n");
    printf("%d %d %d %d\n", letter, space, digit, other);
    return 0;

 
}



本来EOF在的地方是\n,该成EOF后,

比如输入12345
返回的是
0 0 0 0
要是输入12345再回车一下
返回的是
0 0 5 1
当然结束是ctrl+c的,
难道没有回车12345就没有输入进去?
不太明白哎~


[此贴子已经被作者于2016-1-22 18:16编辑过]

搜索更多相关主题的帖子: 统计 letter 
2016-01-22 18:12
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:1 
ctrl+z会结束流输入,ctrl+c是中断输入并让程序退出。

能编个毛线衣吗?
2016-01-22 18:46
窗前的茶
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:24
专家分:34
注 册:2016-1-20
收藏
得分:0 
回复 3楼 zlz66668888
我的意思是输入12345然后ctrl+c结果是0 0 0 0
输入12345再回车,结果是0 0 5 1
2016-01-22 19:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
EOF是用于判断出错的,不是用于读入结束标志符的。你改动的地方就是致错根源。

授人以渔,不授人以鱼。
2016-01-22 20:00
窗前的茶
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:24
专家分:34
注 册:2016-1-20
收藏
得分:0 
回复 5楼 TonyDeng
也是可以的,那本the c programme language 就经常这样~
比如说:
程序代码:
int main()
{
    int c;
    while ((c=getchar())!=EOF)
        putchar(c);
}
2016-01-22 20:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
回复 6楼 窗前的茶
可以就不会出你的问题。实践证明它在某些情况下失效,你还信那书?书再经典再权威,其方法不通用就是不通用。

授人以渔,不授人以鱼。
2016-01-22 20:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
想知道怎么回事,在循环中第一条语句加入putchar(c)看看读入了什么。之前那个帖也算白回了,你的c定义是啥?

授人以渔,不授人以鱼。
2016-01-22 20:53
窗前的茶
Rank: 2
来 自:北京
等 级:论坛游民
帖 子:24
专家分:34
注 册:2016-1-20
收藏
得分:0 
回复 8楼 TonyDeng
那个,您不要生气哈,你的回答我是认真看了的
不过对于这个问题,我是不太理解的,至少我现在的理解是这样,
输入的内容是放在了缓冲区里,并没有进入程序,回车后就进入了,这是ctrl+c就终止了运行程序。
刚刚开始学习,可能理解方面也有疏漏,请谅解,有些问题可能您看来很弱智,若是耐心解答就太谢谢啦~
2016-01-22 22:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
我之前告訴過你,getchar(0要用int接收返回値,否則會在後面的判斷中出錯,你聽了嗎?你定義的char a是什麽東西?用了這個類型,還敢用它跟EOF(-1)比較?

授人以渔,不授人以鱼。
2016-01-23 13:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
我前面一直説了,EOF是“錯誤”的意思,是在流(文件讀寫和控制臺讀寫都是流數據讀寫模式)出現錯誤的時候觸發,一旦標誌流出錯,需要程序員主動復位才能使後期的讀寫正常執行。在控制臺中按下Ctrl+Z(MS平臺)或Ctrl+D(Linux平臺),都是人爲製造錯誤,原則上就是逆天做法,那些書屢屢教人這麽寫這麽做,都不知道怎麽説那些權威。再説了,在文件流中,很多時候有的文檔是沒有結束標誌的,你找不到令讀寫函數出現EOF的機會,那岂不是死循環了。

授人以渔,不授人以鱼。
2016-01-23 13:30
快速回复:有关EOF的
数据加载中...
 
   



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

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