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

程序怎么运行结果不对啊?求指教

meidireshuiq 发布于 2011-10-06 08:47, 481 次点击
这是谭浩强c++课本上的程序怎么运行结果不对啊?求指教
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
    int num;
    char name[20];
    float score;
};
int main()
{
    student stud[5]={1001,"li",85,1002,"fun",97.5,1004,"wang",54,1006,"tan",76.5,1010,"ling",96};
    ofstream outfile("stud.dat",ios::out|ios::binary);
    if(!outfile)
    {
        cerr<<"open error!"<<endl;
        abort();
    }
    ifstream infile("stud.dat",ios::in|ios::binary);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        abort();
    }
    for(int i=0;i<5;i++)
        outfile.write((char *)&stud[i],sizeof(stud[i]));
    student stud1[5];
    for(int i=0;i<5;i=i+2)
    {
        infile.seekg(i*sizeof(stud[i]),ios::beg);
        infile.read((char *)&stud1[i/2],sizeof(stud1[0]));
        cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
    }
    cout<<endl;
    stud[2].num=1012;
    strcpy(stud[2].name,"wu");
    stud[2].score=60;
    outfile.seekp(2*sizeof(stud[0]),ios::beg);
    outfile.write((char *)&stud[2],sizeof(stud[2]));
    infile.seekg(0,ios::beg);
    for(int i=0;i<5;i++)
    {
        infile.read((char *)&stud[i],sizeof(stud[i]));
        cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
    }
    infile.close();
    outfile.close();
    return 0;
}
1 回复
#2
ragnaros2011-10-07 12:14
程序代码:
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
    int num;
    char name[20];
    float score;
};
int main()
{
    student stud[5]={1001,"li",85,1002,"fun",97.5,1004,"wang",54,1006,"tan",76.5,1010,"ling",96};
    ofstream outfile("stud.dat",ios::out|ios::binary);
    if(!outfile)
    {
        cerr<<"open error!"<<endl;
        abort();
    }
    ifstream infile("stud.dat",ios::in|ios::binary);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        abort();
    }
    for(int i=0;i<5;i++)
        outfile.write((char *)&stud[i],sizeof(stud[i]));
    student stud1[5];
    for(int j=0;j<5;j=j+2)
    {
        infile.seekg(j*sizeof(stud[j]),ios::beg);
        infile.read((char *)&stud1[j/2],sizeof(stud1[0]));
        cout<<stud1[j/2].num<<" "<<stud1[j/2].name<<" "<<stud1[j/2].score<<endl;
    }
    cout<<endl;
    stud[2].num=1012;
    strcpy(stud[2].name,"wu");
    stud[2].score=60;
    outfile.seekp(2*sizeof(stud[0]),ios::beg);
    outfile.write((char *)&stud[2],sizeof(stud[2]));
    infile.seekg(0,ios::beg);
    for(int k=0;k<5;k++)
    {
        infile.read((char *)&stud[k],sizeof(stud[k]));
        cout<<stud[k].num<<" "<<stud[k].name<<" "<<stud[k].score<<endl;
    }
    infile.close();
    outfile.close();
    return 0;
}
i重复定义了,将后面两个for循环里的i修改下

[ 本帖最后由 ragnaros 于 2011-10-7 12:15 编辑 ]
1