MyException - 我的异常网
当前位置:我的异常网» C++ » 一个异常的统计文本文件的空行的有关问题

一个异常的统计文本文件的空行的有关问题

www.MyException.Cn  网友分享于:2013-02-20  浏览:4次
一个错误的统计文本文件的空行的问题
一个错误的统计函数的问题

要求:统计某一个文本文件,有多少行?包括空行。

这个代码是我在一个非常老的帖子里找到的答案,是一个错误的,

原因不得而知。

我测试过当文本文件是这样的话,那么会有严重漏洞

空行1
hello
空行2
csdn

 预计结果是4,结果这代码统计出来的是3.


#include <iostream>
#include <fstream>
#include <string>

int main()
{
    using namespace std;
    const char filename[] = "test.cpp";
    ifstream fin;
    string temp;

    fin.open(filename);
    if (!fin.is_open())
    {
        cout << "不能打开文件"<< filename << endl;
        exit(EXIT_FAILURE);
    }
    int count = 0;
    getline(fin, temp);
    while (fin.good())
    {
        count++;
        getline(fin, temp);
    }
    fin.close();
    cout << "文件" << filename << "共有"
        << count << "行。\n";
    return 0;
}


猜测:geline是会对某些标志进行置位的, 如果某一非空行后跟一个空行,那么这个函数就会对标志置位,导致good()返回false.

但是:如果文本的第一行是空行,这个函数又不会返回false.    可见getline这个函数是多么的2啊。。。。。。。。。。


------解决方案--------------------
你在count++;这句后面加一句cout<<temp;看看到底读出了那些行。
看看这两个图。






------解决方案--------------------

//while (fin.good())
while(fin)

------解决方案--------------------
楼主,第四行读了,你在while循环的getline函数下面加一个cout<<temp<<endl;试一试
#include <iostream>
 #include <fstream>
 #include <string>
 
int main()
 {
     using namespace std;
     const char filename[] = "t.txt";
     ifstream fin;
     string temp;
 
    fin.open(filename);
     if (!fin.is_open())
     {
         cout << "不能打开文件"<< filename << endl;
         exit(EXIT_FAILURE);
     }
     int count = 0;
      getline(fin, temp);
     while (fin.good())
     {
         count++;
        getline(fin, temp);
cout<<temp<<endl;
     }
     fin.close();
     cout << "文件" << filename << "共有"

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有