关于一个程序的算法问题!请指教!
先谢谢各位能看小弟的帖,本人的问题如下:最近本人在写程序的途中,写完以后就会去数代码的行数……(由于别人都在看某某程序有多少行……而养成了这个习惯……)每次写完都要去数……哎……觉得麻烦,就想自己写个自动读出行数的C语言小程序!
本人的思路如下:
(由于本人才开始学编程不久,希望有什么错的地方大家指正,谢谢)
程序开始,使用命令(比如在CMD模式下 chengxu(程序名) a.txt(目录下的txt文件))这样去读入一个文件,然后程序开始运行,检测每一行无否字符,如果有的话n++,如果没有,就不++,最后输出n……
这是程序大概的思路,不知道可否,大家给看看吧!谢谢了!如果有什么不足,请给予改正下……
还有,就是在“chengxu(程序名) a.txt(目录下的txt文件))”C语言应该怎么实现?
问题结束,谢谢大家!
----------------解决方案--------------------------------------------------------
程序写完还用数行数吗?直接拉到最后一行看一下不就行了吗?
----------------解决方案--------------------------------------------------------
不用数的
----------------解决方案--------------------------------------------------------
嘿嘿,自己写一个程序完完,大家给看看算法的思路吧!
谢谢了!只给讲算法,编写就不必了!我自己试着来!呵呵!谢谢大家了啊!
----------------解决方案--------------------------------------------------------
嘿嘿,我小时候写作文也是这样的,写一行数一下字数。
其实算行数时空行也算,不用特别考虑,遇到字符'\n'行数就加一
非要去除空行就这样,写一个小的状态机:
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
if(ch != ' ' || ch != '\n' || ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count;
state = 0;
}
}
while((ch=getchar()) != EOF)
{
if(ch != ' ' || ch != '\n' || ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count;
state = 0;
}
}
----------------解决方案--------------------------------------------------------
int ch,state,count=0;
while((ch=getchar()) != EOF) //请问EOF是什么意思?还有getchar()啥意思啊?输入以个字符?还时?怎么理解?
{
if(ch != ' ' || ch != '\n' || ch != '\t') //非空字符
state = 1; //当字符不等于空字符,或不等于回车,或不等于\t时state加等于1 这里state起到什么作用?
if(ch == '\n' && state) //ch等于换行,并且state为真时……
{
++count; //ccount起啥用啊?
state = 0;
}
}
还请帮忙看下了!谢谢啊!
----------------解决方案--------------------------------------------------------
大家帮忙看看啊!我SL问的问题!
----------------解决方案--------------------------------------------------------
好像写错了,或改为与
state是记录状态的,EOF表示文件结束
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
if(ch != ' ' && ch != '\n' && ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
while((ch=getchar()) != EOF)
{
if(ch != ' ' && ch != '\n' && ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
----------------解决方案--------------------------------------------------------
还有,就是在“chengxu(程序名) a.txt(目录下的txt文件))”C语言应该怎么实现?
在命令行下实现的!
----------------解决方案--------------------------------------------------------
把完整的程序给你:
这一个最简单:
#include <stdio.h>
int main(void)
{
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
if(ch != ' ' && ch != '\n' && ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
fprintf(stdout,"no-space lines :\t%d",count);
return 0;
}
int main(void)
{
int ch,state,count=0;
while((ch=getchar()) != EOF)
{
if(ch != ' ' && ch != '\n' && ch != '\t') //非空字符
state = 1;
if(ch == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
fprintf(stdout,"no-space lines :\t%d",count);
return 0;
}
这一个更高效:
#include <stdio.h>
#define MAX_LINE 80
int main(void)
{
int i,state,count=0;
static char buf[MAX_LINE];
while(fgets(buf,MAX_LINE,stdin) != NULL)
{
for(i=0;buf[i] != '\0';++i)
{
if(buf[i] != ' ' && buf[i] != '\n' && buf[i] != '\t') //非空字符
state = 1;
}
if(buf[i-1] == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
if(feof(stdin))
{
fprintf(stdout,"no-space lines :\t%d",count);
return 0;
}
if(ferror(stdin))
{
fprintf(stderr,"read file error!\n");
return 1;
}
}
#define MAX_LINE 80
int main(void)
{
int i,state,count=0;
static char buf[MAX_LINE];
while(fgets(buf,MAX_LINE,stdin) != NULL)
{
for(i=0;buf[i] != '\0';++i)
{
if(buf[i] != ' ' && buf[i] != '\n' && buf[i] != '\t') //非空字符
state = 1;
}
if(buf[i-1] == '\n' && state)
{
++count; //记录一个非空行
state = 0;
}
}
if(feof(stdin))
{
fprintf(stdout,"no-space lines :\t%d",count);
return 0;
}
if(ferror(stdin))
{
fprintf(stderr,"read file error!\n");
return 1;
}
}
文件保存为lc.c,通过重定向符号<输入要统计的文件,编译生成lc后,可以统计lc.c文件:
lc < lc.c
no-space lines : 30
[[it] 本帖最后由 VxWorks 于 2008-6-15 14:00 编辑 [/it]]
----------------解决方案--------------------------------------------------------