C++ 如何更改存储在c+中文件中的特定记录的特定实体+;
嗨,朋友们,我想修改存储在文件中的特定记录的特定实体。就像我将记录存储在文件中一样 第35卷 姓名:阿德南·伊尔沙德 状况:不被接纳 第40卷 姓名:阿德尔·艾哈迈德 状况:不被接纳 第30卷 姓名:阿里什 阿德南:不允许 第35卷 姓名:单 状况:不被接纳 在这里,我想通过roll no搜索记录,并将该记录的状态更改为与我输入的相同 30滚动“否”以搜索记录,然后程序搜索该记录并将其状态更改为“已接纳”。 我已经这样做了,但是我的代码只改变了一条记录,当我对另一条记录这样做时,什么也没有发生。 代码在这里C++ 如何更改存储在c+中文件中的特定记录的特定实体+;,c++,C++,嗨,朋友们,我想修改存储在文件中的特定记录的特定实体。就像我将记录存储在文件中一样 第35卷 姓名:阿德南·伊尔沙德 状况:不被接纳 第40卷 姓名:阿德尔·艾哈迈德 状况:不被接纳 第30卷 姓名:阿里什 阿德南:不允许 第35卷 姓名:单 状况:不被接纳 在这里,我想通过roll no搜索记录,并将该记录的状态更改为与我输入的相同 30滚动“否”以搜索记录,然后程序搜索该记录并将其状态更改为“已接纳”。 我已经这样做了,但是我的代码只改变了一条记录,当我对另一条记录这样做时,什么也没有发生。
char stat[13];
cout<<"Enter Registration No";
cin>>reg_no;
fstream out("Intermediate.txt",ios::in|ios::out|ios::ate|ios::app);
out.seekg(0,ios::beg);
out.read((char*)&std,sizeof(std));
while(!out.eof())
{
record_no++;
if(strcmp(std.get_reg_no(),reg_no)==0)
{
found=1;
break;
}
}
location=(record_no-1)*sizeof(std);
out.seekp(location,ios::beg);
char new_status[]="Addmitted"; // initialized to replace with status
strcpy(std.status,new_status);
out.write((char*)&std,sizeof(std));
out.close();
charstat[13];
coutreg_no;
fstream out(“Intermediate.txt”,ios::in | ios::out | ios::ate | ios::app);
out.seekg(0,ios::beg);
读出((字符*)和标准,尺寸(标准));
而(!out.eof())
{
记录_no++;
if(strcmp(标准get_reg_no(),reg_no)=0)
{
发现=1;
打破
}
}
位置=(记录编号1)*尺寸(标准);
out.seekp(位置,ios::beg);
char new_status[]=“Addmitted”//初始化为替换为状态
strcpy(标准状态、新状态);
out.write((字符*)和std,sizeof(std));
out.close();
要修改文本文件:
std::vector
)- 不要使用
;有更好的方法(子功能)goto
- 不要在EOF上循环
- 使用
代替std::string
char*
- 模块化,模块化,模块化
get user input (filename, item to modify, etc)
std::vector<items> items = load_file( filename );
auto item = std::find( items.begin(), items.end(), my_search_criterion_predicate );
if (item != items.end())
{
modify item;
}
write_file( items );
user output
获取用户输入(文件名、要修改的项目等)
std::vector items=load_文件(文件名);
auto item=std::find(items.begin()、items.end()、my\u search\u criteria\u predicate);
if(item!=items.end())
{
修改项目;
}
写入_文件(项目);
用户输出
所有这些都需要您稍加学习,但值得付出努力。您的代码看起来很凌乱。使用
goto
会引发潜在的危险,因为代码流可能在运行时被挂起。我们甚至看不到凭证
标签在哪里。在哪里可以找到将更新为0
?它有什么初始化值?另外,您可能只发布可能存在无法解决的问题的代码片段。不是来自main
的完整代码很难理解。此代码是一个长项目的一部分,这就是为什么它看起来很凌乱的原因。初始化值将被替换为我们要修改的值,表示状态“不允许”将更改为“允许”“通过该初始化值。goto
肯定会引起一些标志。我忍不住要链接一个关于goto
charstat[13]的非常好的漫画;coutreg_no;fstream out(“Intermediate.txt”,ios::in | ios::out | ios::ate | ios::app);out.seekg(0,ios::beg);读出((字符*)和标准,尺寸(标准));而(!out.eof()){record_no++;if(strcmp(std.get_reg_no(),reg_no)==0){found=1;break;}}}location=(record_no-1)*sizeof(std);out.seekp(位置,ios::beg);char new_status[]=“Addmitted”;strcpy(标准状态、新状态);out.write((字符*)和std,sizeof(std));out.close();