注册 登录
编程论坛 C++教室

解释下这段代码,关于文件操作

心手2012 发布于 2012-06-09 16:07, 346 次点击
程序代码:
#include <iostream>
#include <fstream>
using namespace std;   //May-02_2012
void main()
{
    ifstream fin("data1.txt");
    ofstream fout("data2.txt");
    char ch; int valid=0;
    while (fin)
    {
        fin.get(ch);
        while (fin && ch==' ') { fin.get(ch); valid=1; }
        if (fin && valid)
        { fout.put(' '); valid=0; }
        fout.put(ch);
    }
    fin.close();
    fout.close();
}


条件判断有些看不明白,求高手
4 回复
#2
zxwangyun2012-06-11 14:31
程序代码:
#include <iostream>
#include <fstream>
using namespace std;   //May-02_2012
void main()
{
    ifstream fin("data1.txt");    //打开输入文件
    ofstream fout("data2.txt");//打开输出文件
    char ch; //保存从输入文件中读取的字符
    int valid=0;//是否有一个或多个连续空格
    while (fin)
    {
        fin.get(ch);//从输入文件中读取一个字符
        while (fin && ch==' ') { fin.get(ch); valid=1; }//过滤输入文件中多余的空格
        if (fin && valid)
        { fout.put(' '); valid=0; }//如果输入文件中有多余的空格(也即有一个或多个连续空格)则用一个空格代替
        fout.put(ch);
    }
    fin.close();
    fout.close();
}


其实说白了这段代码就是过滤data1.txt文件中多余的空格并将内容保存到data2.txt文件中
#3
zxwangyun2012-06-11 14:48
我建议你将代码写为
程序代码:
#include <iostream>
#include <fstream>
using namespace std;
void main()
{
    ifstream fin("data1.txt");
    ofstream fout("data2.txt");
    char ch; int valid=0;
    fin.get(ch);
    while (!fin.eof())
    {
        while (!fin.eof() && ch==' ')
        {
            fin.get(ch);
            valid=1;
        }
        if (!fin.eof() && valid)
        {
            fout.put(' ');
            valid=0;
        }
        fout.put(ch);
        fin.get(ch);
    }
    fin.close();
    fout.close();
}
比较好一点,至少易读。
你原来的程序是有问题的,会在文件最后多输出一个字符,我跟你纠正一下。
#4
心手20122012-06-12 13:47
回复 2楼 zxwangyun
while (fin && ch==' ') { fin.get(ch); valid=1; }//过滤输入文件中多余的空格
怎么就是过滤多余的空格呢?
#5
心手20122012-06-12 13:53
回复 3楼 zxwangyun
哦  搞懂了 3Q
1