Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不从c+中的文件读取数据+;_C++_Eclipse_Class_Oop_File Handling - Fatal编程技术网

C++ 不从c+中的文件读取数据+;

C++ 不从c+中的文件读取数据+;,c++,eclipse,class,oop,file-handling,C++,Eclipse,Class,Oop,File Handling,我已经编写了以下代码,但由于某种原因,我无法理解,代码无法工作或无法从文件中读取数据。我确实把文件放在了代码目录中,但它仍然不起作用。请帮我找出哪里出了问题 #include<iostream> #include<string.h> #include<fstream> #include<stdio.h> #include<cstdlib> using namespace std; class author { public:

我已经编写了以下代码,但由于某种原因,我无法理解,代码无法工作或无法从文件中读取数据。我确实把文件放在了代码目录中,但它仍然不起作用。请帮我找出哪里出了问题

#include<iostream>
#include<string.h>
#include<fstream>
#include<stdio.h>
#include<cstdlib>


using namespace std;

class author
{
public:
    string name;
    string email;
    string addr;

    friend class paper;
public:
    //author();
};

class paper
{
public:
    int id;
    string title;
    paper *ref[20];
    author a[8];


/*paper()
    {
        //ref[20]={};
    }*/
};

class reference
{
public:
    int pid;
    int refid[20];
};

int main()
{
paper *p[50];
fstream file;
file.open("data.txt",ios::in);

/*for(int i=0;i<50;i++)
{
if(!(file.eof()))
{
file.read((char*)p[i],sizeof(paper));
}
}*/


string s1,s2;
if(file)
{
    int i=0;
    while(!(file.eof()))
    {

        p[i]=new paper();

        getline(file,s1);
        p[i]->id = atoi(s1.c_str());
        getline(file,p[i]->title);

        //p[i]->ref = NULL;

        getline(file,s2);
        int k=atoi(s2.c_str());
        for(int j=0;j<k;j++)
        {
        getline(file,p[i]->a[j].name);
        getline(file,p[i]->a[j].email);
        getline(file,p[i]->a[j].addr);
        }

        for(int l=0;l<50;l++)
            {
                cout<<p[l]->id;
                cout<<p[l]->title;
                for(int j=0;j<k;j++)
                {
                    cout<<p[l]->a[j].name;
                    cout<<p[l]->a[j].email;
                    cout<<p[l]->a[j].addr;
                    cout<<"hello";
                }
            }
        i++;
    }

}
file.close();




/*  reference refobj[50];
    for(int i=0;i<50;i++)
{
    cin>>refobj[i].pid;
    for(int j=0;j<20;j++)
    {
        cin>>refobj[i].refid[j];
    }
}*/

ifstream fin;
fin.open("reference.txt");
reference refobj[50];
string s3,s4;
if(fin)
{
    while(!(fin.eof()))
    {
        for(int i=0;i<50;i++)
            {
                getline(fin,s3);
                refobj[i].pid= atoi(s3.c_str());
                for(int j=0;j<20;j++)
                {
                    getline(fin,s4);
                    refobj[i].refid[j]=atoi(s4.c_str());
                }
            }
    }
}
fin.close();



for(int i=0;i<50;i++)
{
    if(p[i]->id==refobj[i].pid)
    {
        for(int j=0;j<20;j++)
        {
            if(refobj[i].refid[j]!=0)
            {
                p[i]->ref[j]= p[j];
            }
        }
    }
}


return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类作者
{
公众:
字符串名;
字符串电子邮件;
字符串地址;
朋友班论文;
公众:
//作者();
};
课堂论文
{
公众:
int-id;
字符串标题;
文件*参考文献[20];
作者a[8];
/*论文()
{
//参考文献[20]={};
}*/
};
课堂参考
{
公众:
int-pid;
int refid[20];
};
int main()
{
纸张*p[50];
流文件;
打开(“data.txt”,ios::in);
/*for(inti=0;iid=atoi(s1.c_str());
getline(文件,p[i]->title);
//p[i]>ref=NULL;
getline(文件,s2);
intk=atoi(s2.c_str());
for(int j=0;ja[j].name);
getline(文件,p[i]>a[j].email);
getline(文件,p[i]>a[j].addr);
}

对于(int l=0;l代码在控制台上不显示任何内容

Weel…我不确定这是否是问题的原因,但是…您从未向发送回车,也从未刷新标准输出

而不是

cout<<p[l]->id;
cout<<p[l]->title;
for(int j=0;j<k;j++)
 {
    cout<<p[l]->a[j].name;
    cout<<p[l]->a[j].email;
    cout<<p[l]->a[j].addr;
    cout<<"hello";
 }
然后,在一个循环中,每次迭代分配一个指针

p[i]=new paper();
但在循环的每个迭代中,您都使用所有50个指针(已分配和未分配)

for(int l=0;l<50;l++)
    {
    cout<<p[l]->id;
    cout<<p[l]->title;
    for(int j=0;j<k;j++)
        {
        cout<<p[l]->a[j].name;
        cout<<p[l]->a[j].email;
        cout<<p[l]->a[j].addr;
        cout<<"hello";
        }
    }
我强烈建议您避免直接使用动态分配。您只需使用50张
纸张的数组即可(不要指向
纸张

或(imHo,更好)使用C++容器;
std::vector<paper> p(50); 

---阅读“reference.txt”时遇到同样的问题;避免检查(仅)
eof()

怎么了?你期望什么行为?你得到了什么?错误是什么?在这里询问时请提供一个“请”。还要确保你用调试器检查了你的程序并进行了逐步检查。代码在控制台上没有显示任何内容。它甚至没有打印带有消息的cout语句。我正在从我所要求的是代码没有打开文件和打印内容。是的,我检查了代码。我做了必要的更改,但仍然没有输出。我刚刚意识到的问题是我的文件根本没有打开。代码确实有效!!非常感谢。这是EOF问题。
for(int l=0;l<50;l++)
    {
    cout<<p[l]->id;
    cout<<p[l]->title;
    for(int j=0;j<k;j++)
        {
        cout<<p[l]->a[j].name;
        cout<<p[l]->a[j].email;
        cout<<p[l]->a[j].addr;
        cout<<"hello";
        }
    }
cout << p[i]->id << std::endl;
cout << p[i]->title << std::endl;
for(int j=0;j<k;j++)
    {
    cout << p[i]->a[j].name << endl;
    cout << p[i]->a[j].email << endl;
    cout << p[i]->a[j].addr << endl;
    cout << "hello" << endl;
    }
paper p[50];
std::vector<paper> p(50); 
// if p is an array (or a vector) of paper
for ( i = 0 ;    getline(file, s1) && getline(file, p[i].title)
              && getline(file, s2) ; ++i )
 {
   p[i].id = atoi(s1.c_str());

   int k = atoi(s2.c_str());

   cout << p[i].id << endl;
   cout << p[i].title << endl;

   for (int j = 0;    (j < k)
                   && getline(file, p[i].a[j].name)
           && getline(file, p[i].a[j].email)
           && getline(file, p[i].a[j].addr) ; ++j )
    {
      cout << p[i].a[j].name << endl;
      cout << p[i].a[j].email << endl;
      cout << p[i].a[j].addr << endl;
      cout << "hello" << endl;
    }
 }