| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 577 人关注过本帖
标题:为何这段代码不能处理连续空行
只看楼主 加入收藏
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
为何这段代码不能处理连续空行
我要统计一个文件的行数,就写了以下代码,如果遇到单一的空行就会忽略不计。但是遇到连续的空行还是会+1,为什么?
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fptr;
    int sum=0,sign=0;
    char c;
    fptr=fopen("test.txt","r");
    c=fgetc(fptr);
    while(!feof(fptr))
    {
        if(c=='\n'&&sign==0)
        {
            ++sum;
            sign=1;
        }
        else    if(c!='\r')
            sign=0;
        c=fgetc(fptr);
    }
    printf("%d",sum);
    return 0;
}
搜索更多相关主题的帖子: 统计 
2012-02-12 12:04
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
当然啦,首先你这个判断就是错误的,比如说首行为空行,手打的换行通常以“\r\n”结尾,那不是第一次循环就自加1了吗?
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
     FILE *fptr;
     int sum=0, sign=1;   //------->sign值用来判断是否是另起一行,遇到换行就为1
     char c;
     fptr=fopen("test.txt","r");
     while(1)
     {
         c=fgetc(fptr);
         if(feof(fptr))
             break;
         else if(c!='\r' && c!='\n')
         {
             if(1 == sign)
             {
                 sum++;
                 sign = 0;
             } 
         }
         else
         {
             sign = 1;
         }
     }
     printf("%d\n",sum);
     fclose(fptr);   //<---------打开文件操作,记得关闭
     system("pause");
     return 0;
}

我的地盘
2012-02-12 20:51
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 2楼 hnuhsg1226
有道理,但是还是不能解释原来的程序遇到连续空行会+1的问题,随意加入一个空行不要紧,加入连续多个就会+1

酱油实习生
2012-02-13 18:52
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:10 
我已经给你解释的很清楚了,你自己没有仔细去推敲,也没有经过单步调试,至少没有用笔在纸上写写,只在头脑里想逻辑这样是不对的,除非是天才。
首先你自己问自己个问题,当“c == '\n' && sign == 1”的时候,c值是通过“if---else if”语句的,是不是能进“else if”条件语句里,使得“sign = 0”,那么如果下行再遇到“\n”进入“if”判断里使得总行数加“1”,这个“下行”包括了不是空行的情况,只要含有“\n”。
你这程序再一个错误,就是如果最后一行不是空行,也没有用换行符结尾怎么办。
写程序之前多在纸上划一划,你会少很多麻烦的。


我的地盘
2012-02-13 23:34
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:0 
回复 4楼 hnuhsg1226
谢谢,以后一定会注意

酱油实习生
2012-02-14 20:12
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    FILE    *fp=fopen( "test.txt", "r");
    int    sign = 0, i;
    char    ch;
   
    while( !feof(fp) )
    {
        ch = fgetc( fp );
        if( ch!='\n' )
            i = 1;
        else if( i==1 )
        {
            i = 0;
            sign++;
        }
    }
    printf("%d\n", sign);

    return 0;
}
        

[ 本帖最后由 yxiangyxiang 于 2012-2-14 20:26 编辑 ]
2012-02-14 20:24
快速回复:为何这段代码不能处理连续空行
数据加载中...
 
   



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

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