我在从文件加载数据时遇到麻烦。我在阅读时放了一个cout<<“进入while循环”,它一直重复直到崩溃,没有显示文件的任何数据。
这是我发现与此问题相关的代码部分,如果需要,我将提供更多信息:
struct Book
{
char name[50];
int bookID;
};
struct Writter
{
char name[30];
int writterID,
bookAmount;
struct Book book[20];
};
struct Publisher
{
char name[20];
int publisherID,
qtAutor;
Writter writter[30];
};
Publisher publisher[20];
void savingData(){
fflush(stdin);
if((arquivo = fopen("contact.dat","wb+")) !=NULL){
cout<<"It enters the write part"<<endl;//just checking if it enters the write part
fwrite(&publisher,sizeof(publisher),1,arquivo);
fclose(arquivo);
}
else{
cout<<"Error: file cannot be opened";
}
}//savingData
void loadingData(){
fflush(stdin);
if((arquivo = fopen("contact.dat","rb+")) !=NULL){
while(!feof(arquivo)){
fread(&publisher,sizeof(publisher),1,arquivo);
if(!feof(arquivo)){
cout<<"Entered the while loop";
}//if
}//while
fclose(arquivo);
}//if
else{
cout<<"Error: file cannot be opened";
}
}
我希望我不会忘记翻译任何内容。
编辑:我做了Sam Varshavchik并把fclose拿出来了。它只出现1次输入,但仍未加载文件中的信息。 在文件中我有1个出版商,1个写作者和2本书。我只在结构上写下名字,其他一切都是通过增量来添加的。 This is a print of the file:答案 0 :(得分:1)
fclose(arquivo);
在while
循环的第一次迭代中,此FILE
将被关闭。关闭后,FILE
不再有效。但接下来会发生的事情是:
while(!feof(arquivo)){
...它将尝试再次检查FILE
状态,以检查是否应该发生循环的另一次迭代。但是这FILE
不再有效;因此这是未定义的行为。
您的错误是您的代码在关闭后继续使用FILE
。一旦你致电fclose
,就会结束比赛。您无法以任何方式触摸FILE
对象或引用它。它消失了。它不复存在。它不复存在了。它加入了唱诗班 - 隐形。这是前 - FILE
。