| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 653 人关注过本帖
标题:程序出错,错误已经找到,但是不太理解,求详解
取消只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:50 回复次数:2 
程序出错,错误已经找到,但是不太理解,求详解
程序代码:
#include <iostream>
#include <fstream>

#define SIZE 60
char filename[SIZE];

using namespace std;

struct Dntnews
{
    char name[SIZE];
    double money;
};

void rname(ifstream,Dntnews *);

int main(void)
{
    ifstream iDfile;
    Dntnews *Dp = new Dntnews;
   
    /*open the file */
    ofstream oDfile;

    again:
    cout << "请输入需要创建的文件路径及文件名: ";
    cin.getline(filename,SIZE);
   
    oDfile.open(filename);

    if(!oDfile.is_open())
    {
       cout << "文件创建失败,请检查文件路径是否正确!\n\n";
       goto again;
    }

    oDfile << "The donation people's list \n\nName\t\tMoney\n";
    /* open to end */

    cout << "请输入捐款人数目: ";
   
    int people = 0;
    cin >> people;

    for(int i = 1; i <= people; i++)
    {
      cout << "请输入捐款人姓名: ";
      (cin >> Dp->name).get();
      cout << "请输入捐款钱数: ";
      cin >> Dp->money;

      //write to the Dfile
      oDfile << '@';       //name's mark
      oDfile << Dp->name;
      oDfile << "\t\t";
      oDfile << '$';      //money's mark
      oDfile << Dp->money;
      oDfile << "\n";
    }
    oDfile.close();
   
    iDfile.open(filename);
    for(i = 1; i <= people; i++)
    {
        cout << i << endl;
        //rname(iDfile,Dp);
        char ch = 0;
        for(;;)
        {
            if(!(iDfile >> ch))
            {
                cout << "到达文件尾" << ch;
                break;
            }

            cout << ch << " == ch\n";
            if(ch == '@')
            {
                iDfile >> Dp->name;
                continue;
            }
            if(ch == '$')
            {
                iDfile >> Dp->money;
                cout << "运行\n";
                break;
            }
        }
        //end

        cout << "运行2" << people << i << endl;
        if(Dp->money >= 10000)
        {
        cout << Dp->name << "捐赠了" << Dp->money;
        if(Dp->money > 36500)
            cout << "元! 感谢" << Dp->name << endl;
        else
            cout << "元." << endl;
        }
        cout << "运行3";
    }
    cout << "运行4" << endl;
    delete Dp;
    cout << "运行5" << endl;
    iDfile.close();
    cout << "运行6" << endl;
    return 0;
}

void rname(ifstream iDfile,Dntnews *Dp)
{
    char ch = 0;
        for(;;)
        {
            if(!(iDfile >> ch))
            {
                cout << "到达文件尾" << ch;
                break;
            }

            cout << ch << " == ch\n";
            if(ch == '@')
            {
                iDfile >> Dp->name;
                continue;
            }
            if(ch == '$')
            {
                iDfile >> Dp->money;
                cout << "运行\n";
                break;
            }
        }
}
这个程序可以正常运行,但是不用
程序代码:
//rname(iDfile,Dp);
        char ch = 0;
        for(;;)
        {
            if(!(iDfile >> ch))
            {
                cout << "到达文件尾" << ch;
                break;
            }

            cout << ch << " == ch\n";
            if(ch == '@')
            {
                iDfile >> Dp->name;
                continue;
            }
            if(ch == '$')
            {
                iDfile >> Dp->money;
                cout << "运行\n";
                break;
            }
        }
        //end


这一段而调用rname函数程序(其内容一模一样)就会读取文件读取出错
在循环中第二次调用函数的时候文件中的读取位置已经不对了
我想应该是带入函数时变元创建副本的问题,但是第二次为什么直接就出错了呢?就算不在上次读取的位置上也应该在开始的位置啊?不懂求解,分全给,望赐教...
我整理了一下,大致只需看
程序代码:
#include <iostream>
#include <fstream>

#define SIZE 60
char filename[SIZE];

using namespace std;

struct Dntnews
{
    char name[SIZE];
    double money;
};

void rname(ifstream,Dntnews *);

int main(void)
{
    ifstream iDfile;
    Dntnews *Dp = new Dntnews;
   
    /*open the file */
    ofstream oDfile;

    again:
    cout << "请输入需要创建的文件路径及文件名: ";
    cin.getline(filename,SIZE);
   
        cout << "请输入捐款人数目: ";
   
    int people = 0;
    cin >> people;

        iDfile.open(filename);
    for(i = 1; i <= people; i++)
    {
        cout << i << endl;
        //rname(iDfile,Dp);
        char ch = 0;
        for(;;)
        {
            if(!(iDfile >> ch))
            {
                cout << "到达文件尾" << ch;
                break;
            }

            cout << ch << " == ch\n";
            if(ch == '@')             //@和$分别是文件中名字和钱的位置,这里无错,不用考虑
            {
                iDfile >> Dp->name;
                continue;
            }
            if(ch == '$')
            {
                iDfile >> Dp->money;
                break;
            }
        }
        //end

           }
    return 0;
}

void rname(ifstream iDfile,Dntnews *Dp)
{
    char ch = 0;
        for(;;)
        {
            if(!(iDfile >> ch))
            {
                cout << "到达文件尾" << ch;
                break;
            }

            cout << ch << " == ch\n";
            if(ch == '@')
            {
                iDfile >> Dp->name;
                continue;
            }
            if(ch == '$')
            {
                iDfile >> Dp->money;
                cout << "运行\n";
                break;
            }
        }
}

搜索更多相关主题的帖子: money color 
2013-03-22 21:13
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
最近在到处研究语言走邪恶路线呢,只是学业繁重啊
这道题能不能帮忙看一看啊,感激不尽啊

I have not failed completely
2013-03-22 22:20
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
回复 8楼 rjsp
嗯我懂了,很有帮助
以前用c声明是FILE *类型的,c++的不是指针有点不适应
对了,我用的编译器是vc6.0的不过个人认为不好用
在台式上有个vs2010可以太大了,有2.5G,速度奇慢,功能我基本也只需要其中的一点点,不划算啊
rjsp能不能推荐个编辑器?谢谢

I have not failed completely
2013-03-23 13:18
快速回复:程序出错,错误已经找到,但是不太理解,求详解
数据加载中...
 
   



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

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