想问问大佬,这个程序框图画的正不正确

void SaveData(tList *tListGue) //保存数据
{
int i = 0;
ofstream ofile("Guestroom.txt", ios_base::out); //创建一个输入文件流对象
if (!ofile)
{
cerr << "保存时打开文件出错!" << endl;
}
cNode *p;
p = tListGue->head->next;
while (p)
{
//从内存中读取数据,存到外盘
if (p->data.flag)
{
ofile << "\n";
ofile << (p->data).ID << "\n";
ofile << (p->data).Type << "\n";
ofile << (p->data).Book << "\n";
ofile << (p->data).Price << "\n";
ofile << (p->data).Function << "\n";
ofile << (p->data).StayTime << "\n";
}

}
cout << "保存数据成功!\n";
ofile.close();
system("pause");
system("cls");
return;     

图片说明

if (!ofile)
{
cerr << "保存时打开文件出错!" << endl;
}
这个应该指向!oflie下面一行

while (p)
这个也应该画一个菱形
否指向保存数据成功的前面
是指向从内存中读取数据,存到外盘
进一步地,从内存中读取数据,存到外盘这个里面也有一个if,你可以详细画出来。

作为流程图,在if选择上,应该把是/否或者 Y N,在线条边上标出来。

个人觉得代码和楼主的流程图不对应。
流程图打开文件出错 流程结束,代码仍然继续执行吧。

代码如下:

if (!ofile)
{
cerr << "保存时打开文件出错!" << endl;
return;//这里增加一个return  才符合流程图。或者原来代码return语句之前的代码放在一个else里也可以
}

一句话:流程图不正确。打开文件出错,代码的逻辑只是报错,并接着执行读写操作。