关于一个C++的有关问题,RETURN 0退出不正常
关于一个C++的问题,RETURN 0退出不正常
就是这两个函数,在调试的时候,一但执行到函数的return 0语句,就提示已停止工作
然后就样
请教各位大大,这是什么问题啊。。。。。。。执行是没错的,在删除后再查询,确实商品的存在性也被改成了0的
这是我写的增加商品的函数,在这个存入以后,return 0,就没问题.....
------解决方案--------------------
首先我不知道问题是什么?我给个小建议,你的return值毫无意义,各个分支各种case的return都是0,有什么用意呢?我感觉这个有可能比程序成功运行更重要
------解决方案--------------------
io.read((char *)&a,sizeof(shangpin));
io.write((char *)&a,sizeof(shangpin));
这个直接把类指针强制转化成 char*,你这样操作相当不规范,更何况你成员变量还有一个
string name; 这里肯定有问题,你自己实现一个getBuffer的功能,把对象组装成数组buffer.
------解决方案--------------------
其实你单步调试可以在return时,继续单步跳入,如果有你自己写的类或结果体,并且带析构函数,就会跳进析构函数的代码,如果一路走下来都没错,但最后还是崩溃了,那就说明问题出在库函数定义的类或结构体上,因为他们没源码,所以析构函数一旦出错,程序直接崩溃。
int bianhaochaxun()//查询商品——按编号查询
{
cout<<"请输入要查询的商品编号!"<<endl;
int bianhao1;
int bianhao2;
cin>>bianhao2;
shangpin a(0," ",0,0);
ifstream in("f1.txt",ios::binary);
if(!in)
{
cout<<"无法打开商品库,请告知管理员\n\n"<<endl;
return 0;
}
for(int i=0;i<=2000;i++)
{
in.seekg(sizeof(shangpin)*i,ios::beg);
in.read((char *)&a,sizeof(shangpin));
bianhao1=a.geibianhao();
//cout<<"编号1:"<<bianhao1<<endl;
//cout<<"编号2:"<<bianhao2<<endl;
if(bianhao2==bianhao1)
{
if(a.geicunzai()==1)
{
if(a.geikucun()>=1)
{
cout<<"存在性"<<a.geicunzai()<<endl;
a.show();
in.close();
return 0;
}
else
{
cout<<"抱歉,该商品已售完,请联系管理员补货!以下是商品信息!"<<endl;
a.show();
in.close();
return 0;
}
}
else
{
cout<<"抱歉,您查询的商品已不存在!"<<endl;
in.close();
return 0;
}
}
else
continue;
}
cout<<"您输入的商品编号有误!请重新查询"<<endl;
in.close();
return 0;
}
int shanchushangpin() //删除商品
{
int bianhao1;
int bianhao2;
cout<<"请输入要删除商品的编号:"<<endl;
cin>>bianhao2;
shangpin a(0,"",0,0);
fstream io("f1.txt",ios::in|ios::out|ios::binary);
if(!io)
{
cout<<"无法打开商品库,请告知管理员\n\n"<<endl;
return 0;
}
for(int i=0;i<=2000;i++)
{
io.seekg(sizeof(shangpin)*i,ios::beg);
io.read((char *)&a,sizeof(shangpin));
bianhao1=a.geibianhao();
if(bianhao1==bianhao2)
{
cout<<"查询到商品信息如下:"<<endl;
a.show();
cout<<"确认要删除请按1,否则按2"<<endl;
int banduan;
cin>>banduan;
if(banduan==1)
{
a.cuncunzai(0);
cout<<"删除成功!"<<endl;
io.seekp(sizeof(shangpin)*i,ios::beg);
io.write((char *)&a,sizeof(shangpin));
io.close();
return 0;
}
else
io.close();
return 0;
}
else continue;
}
cout<<"找不到该商品,请重新输入"<<endl;
io.close();
return 0;
}
就是这两个函数,在调试的时候,一但执行到函数的return 0语句,就提示已停止工作
然后就样
请教各位大大,这是什么问题啊。。。。。。。执行是没错的,在删除后再查询,确实商品的存在性也被改成了0的
这是我写的增加商品的函数,在这个存入以后,return 0,就没问题.....
int zengjiashangpin() //增加商品
{
shangpin b(0," ",0,0);
int bianhao2;
string name2;
double jiage2;
int kucun2;
int xuanzhe;
while(1)
{
cout<<"请输入商品的编号:"<<endl;
cin>>bianhao2;
cout<<"请输入商品的名称:"<<endl;
cin>>name2;
cout<<"请输入商品的价格:"<<endl;
cin>>jiage2;
cout<<"请输入商品的进货量:"<<endl;
cin>>kucun2;
cout<<"请确认商品信息,确认请按1,重输请按2"<<endl;
cin>>xuanzhe;
if(xuanzhe==1)
{
b.cunbianhao(bianhao2);
b.cunname(name2);
b.cunjiage(jiage2);
b.cunkucun(kucun2);
cunru(b);
return 0;
}
else
{
system("cls");
continue;
}
}
}
------解决方案--------------------
首先我不知道问题是什么?我给个小建议,你的return值毫无意义,各个分支各种case的return都是0,有什么用意呢?我感觉这个有可能比程序成功运行更重要
------解决方案--------------------
io.read((char *)&a,sizeof(shangpin));
io.write((char *)&a,sizeof(shangpin));
这个直接把类指针强制转化成 char*,你这样操作相当不规范,更何况你成员变量还有一个
string name; 这里肯定有问题,你自己实现一个getBuffer的功能,把对象组装成数组buffer.
------解决方案--------------------
其实你单步调试可以在return时,继续单步跳入,如果有你自己写的类或结果体,并且带析构函数,就会跳进析构函数的代码,如果一路走下来都没错,但最后还是崩溃了,那就说明问题出在库函数定义的类或结构体上,因为他们没源码,所以析构函数一旦出错,程序直接崩溃。