【发布时间】:2016-01-02 13:47:36
【问题描述】:
我是一个完整的 C++ 初学者,请耐心等待。我被要求编写一个程序,其中一个功能是从文件中删除一条记录并使用数组将其放置在另一个文件中(大小未知,因此计数器)。我尝试了许多不同的方法,但无济于事。现在我收到了abort() 错误,我真的不知道该怎么做或修复。非常需要您的帮助。
void DeletePatient ()
{
ifstream infile;
infile.open ("patients.txt");
ofstream outfile;
outfile.open ("deletedpatients.txt");
int i=0, flag=0, counter=0, deleteID, deletedindex;
//Read contents into array
while(!infile.eof())
{
infile>>IDnumber[i]>> FirstName [i] >> LastName [i] >> PhoneNumber [i] >> Nationality [i];
i++;
counter++;
}
if ( !infile )
cout << "Error opening file\n";
else
{
cout<<"Enter ID number of patient to be deleted\n";
cin >> deleteID;
for(i=0;i<counter;i++)
{
if(deleteID==IDnumber[i])
{
infile >> IDnumber [i] >> FirstName [i] >> LastName [i] >> PhoneNumber [i] >> Nationality [i];
outfile << IDnumber [i] <<" "<< FirstName [i]<<" " << LastName [i]<<" " << PhoneNumber [i]<<" " << Nationality [i];
flag++;
for(deletedindex=i; i<counter; deletedindex++)
{
IDnumber[deletedindex]=IDnumber[deletedindex+1];
FirstName[deletedindex]=FirstName[deletedindex+1];
LastName[deletedindex]=LastName[deletedindex+1];
PhoneNumber[deletedindex]=PhoneNumber[deletedindex+1];
Nationality[deletedindex]=Nationality[deletedindex+1];
}
}
}
infile.close();
if(flag==0)
cout<<"User does not exsist\n";
else
{
ofstream updatefile;
updatefile.open("patients.txt");
for ( i=0 ; i < counter; i++ ) //update file
{
updatefile << IDnumber [i] <<" "<< FirstName [i]<<" " << LastName [i]<<" " << PhoneNumber [i]<<" " << Nationality [i];
}
cout << "Patient is deleted" << endl;
updatefile.close();
}
}
outfile.close ();
}
【问题讨论】:
-
数组的大小是多少?因为阅读时没有上限。此外,在删除数组中的最后一个元素时,
deletedindex+1可能不存在。 -
错误发生在哪里?你是如何分配数组的?
-
原来的大小是200,但是我用一个计数器来读取实际记录的数量,所以计数器是大小,至于我输入要删除的ID后发生的错误。
标签: c++ arrays file visual-c++