| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1519 人关注过本帖
标题:最近论坛里的朋友给写了一个程序,我对这个程序有些问题要问下,请大家帮忙 ...
只看楼主 加入收藏
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
结帖率:80%
收藏
 问题点数:0 回复次数:18 
最近论坛里的朋友给写了一个程序,我对这个程序有些问题要问下,请大家帮忙!谢谢
最近论坛里的朋友给写了一个程序,我对这个程序有些问题要问下,请大家帮忙!谢谢大家!
问题程序如下:
#include <stdio.h>
#define MAX_LINE        80

int main(void)
{
        int i,state,count=0;
        char buf[MAX_LINE];               //*这里定义了一个数组*//
        
        while(fgets(buf,MAX_LINE,stdin) != NULL)    //*这里的fgets是干什么啊?一开始以为是个函数,可是后面都没提到过!*//
        {
                for(i=0;buf[i] != '\0';++i)
                {
                        if(buf[i] != ' ' && buf[i] != '\n' && buf[i] != '\t')        //*查看一行有没有空字符*//
                state = 1;                                                        //*有的话,state为1*//
                }
               
                if(buf[i-1] == '\n' && state)                                   //*这里判断,有空字符的是不是为换行,并且,state为真否*//
        {
                ++count;                                     //*是换行,并且为真的话,就加一行!*//
                state = 0;
        }
        }                                                
        
        if(feof(stdin))                                     //*问题出来了,这里feof是干什么的!stdin?*//
        {
                fprintf(stdout,"no-space lines :\t%d",count);     //*这里fprintf?我还没学过……*//
                return 0;
        }
        
        if(ferror(stdin))                                  //*这里的ferror是干什么的?*//
        {
                fprintf(stderr,"read file error!\n");
                return 1;
        }                                                
}
文件保存为lc.c,通过重定向符号<输入要统计的文件,编译生成lc后,可以统计lc.c文件:
lc < lc.c
no-space lines :        30
搜索更多相关主题的帖子: 朋友 MAX 
2008-06-28 14:17
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
大家帮个忙啊!谢谢了!

编程小菜
2008-06-28 15:40
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
fgets和fprintf都是函数。。。

学到文件那一章节就知道了。。
2008-06-28 17:03
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
stdin是什么东西啊?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-28 20:18
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
stdin是系统自动定义的一个文件指针。

它指向终端输入。。
2008-06-28 20:29
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
我只知道都是库函数里的东西哦,但是具体也不太明白~~~
2008-06-29 00:55
lintaoxe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
得分:0 
。。stdin在stdio.h里定义的标准流,就是键盘。
在类UNIX系统和WIN32系统的下的区别就是流缓冲区的大小不同,在WIN32下标准流的操作是可以调用中断的,UNIX是原子操作  sig_atomic_t类型

你的代码就是一堆输入+条件判断。。如果想深入了解流的操作就要扯到微机原理。。不说了
2008-06-29 08:21
lintaoxe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
得分:0 
补充:feof没问题,保准流里的是不是结尾字符“EOF,”,但是ferror有点小问题,最好是
#include<errno.h>

errno = .......//宏定义,在errno.h
if(ferror(stdin)==errno)

{   
      ........
}

有事到      http://./shawn_rin  留言
2008-06-29 08:30
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
[quote][bo][un]lintaoxe[/un] 在 2008-6-29 08:21 的发言:[/bo]

“你的代码就是一堆输入+条件判断。。”quote]
这句话给解释下,不太明白……

fgets(buf,MAX_LINE,stdin)
这里怎么理解啊?
if(feof(stdin))
这里的feof这里是什么意思?
这里的ferror呢?
问题比较多,请大家帮帮忙!谢谢了!

编程小菜
2008-06-29 12:20
lintaoxe
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-4-10
收藏
得分:0 
fgets(buf,MAX_LINE,stdin)
把键盘输入的存到buf里  ,存的最大量由MAX-LINE给出
feof原本是判断文件是否到达末尾。。。但是不要忘记 文件也是流   键盘也是流。既然都是流操作
那么当然可以互用,这句话就是把如果键盘没有输入。。就怎么怎么样。。。
至于ferror。。。。写这代码的人很j8,      本来是对流操作可能出错,那么就掉ferror函数对错误进行存储,以便分析。。。
比如    FILE *p      p=fopen(.....)     
          if    ferror(p)==....处理函数1
else     ferror(p)==....处理函数2   
这里的用法就是防止I/O缓冲区没有得到输入的字符。。我告诉你了 WIN32是可以被中断请求中断的,UNIX系统是原子操作 不被中断。。。
所以写代码的是个windows的顽固非子

有事到      http://./shawn_rin  留言
2008-06-30 10:10
快速回复:最近论坛里的朋友给写了一个程序,我对这个程序有些问题要问下,请大家 ...
数据加载中...
 
   



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

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