| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:新手请教一个简单程序
只看楼主 加入收藏
ytsgj
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-9-7
收藏
 问题点数:0 回复次数:7 
新手请教一个简单程序
工作需要,重学C。
在看 The C Programming Language
这是其中一个练习给出的答案,有地方没看懂,请达人指点。

Write a program to count blanks, tabs, and newlines.

 
#include <stdio.h>
 
int main(void)
{
  int blanks, tabs, newlines;
  int c;
  int done = 0;
  int lastchar = 0;
 
  blanks = 0;
  tabs = 0;
  newlines = 0;
 
  while(done == 0)
  {
    c = getchar();
 
    if(c == ' ')
      ++blanks;
 
    if(c == '\t')
      ++tabs;
 
    if(c == '\n')
      ++newlines;
 
    if(c == EOF)
    {
      if(lastchar != '\n')
      {
        ++newlines; /* this is a bit of a semantic stretch, but it copes
                     * with implementations where a text file might not
                     * end with a newline. Thanks to Jim Stad for pointing
                     * this out.
                     */
      }
      done = 1;
    }
    lastchar = c;
  }
 
  printf("Blanks: %d\nTabs: %d\nLines: %d\n", blanks, tabs, newlines);
  return 0;
}

-------------------
1. done=0,dong=1是指什么?
2. 可不可以给说明一下最后部分
if(c == EOF)
    {
      if(lastchar != '\n')
      {
        ++newlines;
      }
      done = 1;
    }
    lastchar = c;
  }
3.return 0是返回什么?

也许问题幼稚,没办法,身边没人请教,全得自己来。
多谢了!
搜索更多相关主题的帖子: 工作 include count 
2008-09-07 20:28
victormaomao520
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-9-7
收藏
得分:0 
1. done=0,dong=1是指什么?
2. 可不可以给说明一下最后部分
if(c == EOF)
    {
      if(lastchar != '\n')
      {
        ++newlines;
      }
      done = 1;
    }
    lastchar = c;
  }
3.return 0是返回什么?

1.done=0  done 的初始值为0,
  done=1  done 被赋值为1
2.
if(c == EOF)//判断c与EOF是否相等,如果相等执行程序,不等执行后续程序
    {
      if(lastchar != '\n')//判断lastchar与“\n”是否是不等
      {
        ++newlines; //newlines,先加1,后做运算。
      }
      done = 1;//lastchar与\n相等,done赋值为1
    }
    lastchar = c;//c不等于EOF lastchar赋值为c
  }
3return 0;这个就是返回0.
2008-09-07 20:46
ytsgj
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-9-7
收藏
得分:0 
多谢victormaomao520的回答。我想我问的不清楚。
1.done在这个程序里的含义是什么?

2.每一个语句的意思我明白,可是这段if语句执行的意义是什么?
 lastchar只在之前赋值0,那 lastchar != '\n' 从何而来。

3.这个return知道了。之前见到的都没这个语对main进行int声明,也就没用到这个return。

不好意思。

[[it] 本帖最后由 ytsgj 于 2008-9-7 21:17 编辑 [/it]]
2008-09-07 20:52
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
回复 3# ytsgj 的帖子
我晕~如果以前学过,不至于连return 0都不知道吧。
对于这种程序问题,自己拿手画画,把自己放计算机,自然就知道了~别人帮你也没用!

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-09-07 21:00
ytsgj
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-9-7
收藏
得分:0 
[bo][un]qfyzy[/un] 在 2008-9-7 21:00 的发言:[/bo]

我晕~如果以前学过,不至于连return 0都不知道吧。
对于这种程序问题,自己拿手画画,把自己放计算机,自然就知道了~别人帮你也没用!


谢谢你的指正。学C已经是10年前的事情了。
我现在的电脑上还没有合适的编译器。TurboC得DOS,VC装了一个总出错。
也就是暂时无法在自己的电脑上调试程序。
2008-09-07 21:12
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
推荐你用DEV-C++
http://www.
装好后,点新建文件就可以,最后存盘,用.C作扩展名.
return 0;意思是告诉操作系统程序正常推出.
TC在WINDOWS下照用,有DOS虚拟机的。不推荐~
1,2还是自己研究

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-09-07 21:24
God_WangY
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-9-6
收藏
得分:0 
回复楼主!
1. done=0,dong=1是指什么?答:done是输入结束标志。0表示没有结束,1表示输入结束。

2. 可不可以给说明一下最后部分
if(c == EOF)
    {
      if(lastchar != '\n')\\
      {
        ++newlines;
      }
      done = 1;
    }
    lastchar = c;
  }
说明:这段代码是用来完善整个程序的,因为当如果输入为多行时,那么最后一个输入不一定是回车,(如ctrl+z等等),若没有这段代码,就会漏掉最后一行,即少统计一行。所以如果c == EOF输入结束,但不是以回车结束的,也应该记为新的一行,++newlines。
3.return 0是返回什么?
答:因为main函数返回值为整形,所以要返回一个整形值,0意思是返回给操作系统。
2008-09-07 21:25
ytsgj
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-9-7
收藏
得分:0 
多谢God_WangY,现在缺乏编程的思维,你这一点拨有些豁然开朗的感觉。非常感谢!
也谢谢qfyzy给的链接,下载完毕了,明晚用用看,以后会自己多实践的。

多谢给与回复的三位大虾!
2008-09-07 23:10
快速回复:新手请教一个简单程序
数据加载中...
 
   



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

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