一个奇怪的问题 initialization of 'querena' is skipped by 'goto buyizhi'

kkkgho 2008-04-01 11:05:39
这个程序原本没问题的
我加上一个循环
for(int queren=0;queren<=5;queren++)
{
if (date[queren]!=dat[queren])
{
mima2=1;
}
}

之后
buyizhi:这个标号就提示出错
应该怎么办??

错误如下
D:\Microsoft Visual Studio\MyProjects\asdsad\dsfs.cpp(172) : error C2362: initialization of 'querena' is skipped by 'goto buyizhi'
D:\Microsoft Visual Studio\MyProjects\asdsad\dsfs.cpp(156) : see declaration of 'querena'


#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
/*---------------------------------------------------------------------------------------------*/
class jishiben
{
char neirong[100];
int panduan;
char lujin[20];
public:
int tianjia();
int shanchu();
int duqu();
int shezhi();
};

/*----------------------------------------------------------------------------------------------*/
int jishiben::tianjia() //添加数据
{
char buf[20];
char mima[20];
char mima3[20];

int mima2;
ifstream ifile1("c:\\lujin.ini",ios::in);
ifile1.getline(buf,50,'\n');
mima2=strcmp("a",buf);//判断是否相等
if (mima2!=0)
{
strcpy(lujin,buf);
cout<<lujin<<endl;
goto youlujin;
}
cout <<"请输入路径"<<endl;
cout <<"DOS记事本\\主程序\\添加数据>";
scanf("%s",lujin);
youlujin:
ofstream ofile(lujin,ios::app);
if (! ofile) cerr <<"链接文件失败!" <<endl;
else
{
cout<<"文件连接成功!"<<endl;
while(1)
{
cout <<"请输入内容,换行请按enter" <<endl;
cout <<"DOS记事本\\主程序\\添加数据>";
cin>>neirong;
ofile <<neirong <<endl;
cout <<"继续添加请按1,返回上级目录请按2" <<endl;
cout <<"DOS记事本\\主程序\\添加数据>";
cin>>panduan;
if (panduan != 1)
break;
}
}
return 0;
}
int jishiben::shanchu()//删除数据
{
char buf[20];
char mima[20];
char mima3[20];
int mima2;
ifstream ifile1("c:\\lujin.ini",ios::in);
ifile1.getline(buf,50,'\n');
mima2=strcmp("a",buf);//判断是否相等
if (mima2!=0)
{
strcpy(lujin,buf);
cout<<lujin<<endl;
goto youlujin1;
}
cout <<"请输入要删除的文件路径"<<endl;
cout <<"DOS记事本\\主程序\\删除数据>";
scanf("%s",lujin);
youlujin1:
ofstream ofile(lujin);
cout<<"数据清除成功"<<endl;
return 0;
}
int jishiben::duqu()//读取数据
{
char buu[20];
char pass[20];
char pass3[20];
int pass2;
ifstream ifile1("c:\\lujin.ini",ios::in);
ifile1.getline(buu,50,'\n');
pass2=strcmp("a",buu);//判断是否相等
if (pass2!=0)
{
strcpy(lujin,buu);
cout<<lujin<<endl;
goto youlujin1;
}
char buf;
int changdu;
cout <<"请输入要读取的文件路径"<<endl;
cout <<"DOS记事本\\主程序\\读取数据>";
scanf("%s",lujin);
youlujin1:
ifstream ifile(lujin,ios::in);
ifile.seekg(0,ios::end);
changdu=ifile.tellg();
cout<<"文件长度为:"<<changdu<<endl;
ifile.seekg(0,ios::beg);
for (int i=1;i<=changdu;i++)
{
ifile.get(buf);
cout<<buf;
ifile.seekg(i);
}
cout<<endl;
return 0;
}
int jishiben::shezhi()//系统设置
{
char buf[20];
char mima[20];
char mima3[20];
int date[6];
int dat[6];

int mima2;
ifstream ifile("c:\\shezhi.ini",ios::in);
ifile.getline(buf, 20, '\n');
cout<<"请输入要执行的操作,1为修改密码,2为修改路径"<<endl;
cout<<"DOS记事本\\主程序\\系统设置>";
cin>>panduan;
mimacuo://请求输入密码
if (panduan==1)//设置密码
{
mima2=strcmp("a",buf);
if (mima2==0)
{
cout<<"当前尚未设置密码,请输入你要设置的密码"<<endl;
goto buyizhi;
}
else
{
mima2=0;
cout<<"请输入原密码"<<endl;
cout<<"第1位密码:";
cin>>date[0];
cout<<"第2位密码:";
cin>>date[1];
cout<<"第3位密码:";
cin>>date[2];
cout<<"第4位密码:";
cin>>date[3];
cout<<"第5位密码:";
cin>>date[4];
cout<<"第6位密码:";
cin>>date[5];
for(int queren=0;queren<=5;queren++)
{
if (date[queren]!=dat[queren])
{
mima2=1;
}
}

if (mima2!=0)//如果原密码错误
{
cout<<"密码错误!请重新输入"<<endl;
goto mimacuo;//跳转回去,重新输入密码
}
if (mima2==0)//如果原密码正确
{
cout<<"密码正确,请输入6位数字新密码,要取消密码请输入a"<<endl;
buyizhi://请求新密码 这个出错了

cout<<"第1位密码:";
cin>>date[0];
cout<<"第2位密码:";
cin>>date[1];
cout<<"第3位密码:";
cin>>date[2];
cout<<"第4位密码:";
cin>>date[3];
cout<<"第5位密码:";
cin>>date[4];
cout<<"第6位密码:";
cin>>date[5];
cout<<"请再次输入新密码"<<endl;
cout<<"第1位密码:";
cin>>dat[0];
cout<<"第2位密码:";
cin>>dat[1];
cout<<"第3位密码:";
cin>>dat[2];
cout<<"第4位密码:";
cin>>dat[3];
cout<<"第5位密码:";
cin>>dat[4];
cout<<"第6位密码:";
cin>>dat[5];
mima2=0;

for(int pa=0;pa<=5;pa++)
{
if(dat[pa]!=date[pa])
{
mima2=1;
}
}
if (mima2==0)
{
cout<<"密码修改成功"<<endl;
ofstream ofile("c:\\shezhi.ini",ios::binary);
ofile.write((char *)date,sizeof(date));
ofile.close();
ifstream ifile("c:\\shezhi.ini",ios::binary);
ifile.read((char *)dat,sizeof(dat));
cout<<dat[0]<<dat[1]<<dat[2]<<dat[3]<<dat[4]<<dat[5];
}
if (mima2!=0)
{
cout<<"两次密码输入不一致,请重新输入"<<endl;
cout<<"DOS记事本\\主程序\\系统设置\\设置密码>";
goto buyizhi;//跳转输入密码处
}
}


}
};
if (panduan==2)//设置路径
{
ifstream ifile("c:\\lujin.ini",ios::in);
ifile.getline(buf, 20, '\n');
mima2=strcmp("a",buf);//判断是否相等
if (mima2==0)
{
cout<<"还没有设置路径,你可以现在设置路径!"<<endl;
cout<<"DOS记事本\\主程序\\系统设置\\设置路径>";
scanf("%s",mima);
ofstream ofile("c:\\lujin.ini");
ofile <<mima<<endl;
}
else
{
cout<<"当前设置为:"<<buf<<endl;
cout<<"你请输入路径!"<<endl;
cout<<"DOS记事本\\主程序\\系统设置\\设置路径>";
scanf("%s",mima);
ofstream ofile("c:\\lujin.ini");
ofile <<mima<<endl;
}
};
return 0;
}
/*---------------------------------------------------------------------------------------------*/

void main()
{
char buf[6];
char mima[6];
int mima2;
int dat[6];
int date[6];
int s=-1;
jishiben jishi1;
cout <<"------------------------欢迎使用雪舞软件------------------------------------" <<endl;
cout <<"-------------------------DOS记事本V2.0--------------------------------------" <<endl;
mimacuo://密码错误跳转到这里
ifstream ifile("c:\\shezhi.ini",ios::in);//连接设置文件
//-------------判断设置文件是否生成,如未生成则生成----------
ifstream ifile1("c:\\lujin.ini",ios::in);
if(!ifile1) //判断路径设置文件
{
ofstream ofile("c:\\lujin.ini",ios::app);
ofile <<"a"<<endl;
}
if(!ifile) //判断密码设置文件
{
ofstream ofile("c:\\shezhi.ini",ios::app);
ofile <<"a"<<endl;
goto xunhuan;
}
//----------------------------------------------------------

ifile.getline(buf, 20, '\n');
mima2=strcmp("a",buf);
if (mima2==0)
{
for(;;)
{
xunhuan://进入循环
cout <<"请输入要执行的操作:"<<endl<<"0--退出程序"<<endl<<"1--输入数据"<<endl<<"2--删除数据"<<endl<<"3--读取数据" <<endl<<"4--系统设置"<<endl;
cout <<"DOS记事本\\主程序>";
cin>>s;
if (s==4)
jishi1.shezhi();
if (s==3)
jishi1.duqu();
if (s==2)
jishi1.shanchu();
if (s==1)
jishi1.tianjia();
if (s==0)
{
cout<<"谢谢使用!"<<endl;
break;
}
}
}
else
{
cout<<"系统已经设置密码,请输入密码后可以使用"<<endl;
mima2=0;
ifstream ifile("c:\\shezhi.ini",ios::binary);
ifile.read((char *)dat,sizeof(dat));
cout<<"第1位密码:";
cin>>date[0];
cout<<"第2位密码:";
cin>>date[1];
cout<<"第3位密码:";
cin>>date[2];
cout<<"第4位密码:";
cin>>date[3];
cout<<"第5位密码:";
cin>>date[4];
cout<<"第6位密码:";
cin>>date[5];
for(int queren=0;queren<=5;queren++)
{
if (date[queren]!=dat[queren]) mima2=1;
}
if (mima2==0)
{
goto xunhuan;
}
else
{
cout<<"密码错误!请重新输入"<<endl;
goto mimacuo;
}
}
}


...全文
766 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgjxwl 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 taodm 的回复:]
楼主啊,你还是换本《c++ Primer》第四版做教材,然后,那个笨老师的课可以不用去上了。
[/Quote]
呵呵,大哥说的即是..
kkkgho 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 taodm 的回复:]
楼主啊,你还是换本《c++ Primer》第四版做教材,然后,那个笨老师的课可以不用去上了。
[/Quote]
那我是拿不到毕业证了
taodm 2008-04-02
  • 打赏
  • 举报
回复
楼主啊,你还是换本《c++ Primer》第四版做教材,然后,那个笨老师的课可以不用去上了。
ttkk_2007 2008-04-02
  • 打赏
  • 举报
回复

switch(c){
int i = 0;
case 1: ...
case 2: ...
}
//i被goto跨了,所以错了
//除非
switch(c){
{int i = 0;}
case 1: ...
case 2: ...
}
kkkgho 2008-04-02
  • 打赏
  • 举报
回复
定义不可以被goto跨
什么意思?
事实上我们学校的老师都不理解为什么这样就解决了
ryfdizuo 2008-04-01
  • 打赏
  • 举报
回复
lz发了好几次贴了.
程序是一次比一次长,但是始终没有丢弃goto语句,所以程序就变得连你自己都很难理解了,可维护性太差了.
showyfish 2008-04-01
  • 打赏
  • 举报
回复
goto早已经被遗弃了,
我记得那还是上小学时带行号的BASIC,和FORTRAN用过呵呵
楼主的代码颇有点古典味道啊呵呵
建议楼主用OO思想好好设计一下。。。
taodm 2008-04-01
  • 打赏
  • 举报
回复
兄弟啊,你能不能学会不用goto?
用if-else
csdn5211 2008-04-01
  • 打赏
  • 举报
回复
定义不可以被goto跨,可以把queren的声明放到函数最开始。
baihacker 2008-04-01
  • 打赏
  • 举报
回复
最有可能是for (int i = 0;...)中的i的作用域的问题
你改一下。。。
由于这个的作用域可能是声明处到结尾,所以goto的时候会出问题!!
paidfighting 2008-04-01
  • 打赏
  • 举报
回复
好多goto。。
taodm 2008-04-01
  • 打赏
  • 举报
回复
楼主啊,还是找本C或者c++基础书补补课吧。
定义不可以被goto跨,这是基本常识
kkkgho 2008-04-01
  • 打赏
  • 举报
回复
UPUPUP
kkkgho 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 csdn5211 的回复:]
定义不可以被goto跨,可以把queren的声明放到函数最开始。
[/Quote]

牛人,问题解决了
改为 for(;queren<=5;queren++)
然后把声明放到函数第一行就好了,但是能否解释一下是为什么呢
"定义不可以被goto跨"是什么意思?
kkkgho 2008-04-01
  • 打赏
  • 举报
回复
为了可读性,我加入了大量的注释......
kkkgho 2008-04-01
  • 打赏
  • 举报
回复
My god............
或许我应该去找找GOTO的代替者了
Supper_Jerry 2008-04-01
  • 打赏
  • 举报
回复
所有定义都应当放到goto label之前。
ttkk_2007 2008-04-01
  • 打赏
  • 举报
回复
这么多goto,你自己都难以控制了,你程序中可能存在7楼的这种写法,所以错了
zhy282289 2008-04-01
  • 打赏
  • 举报
回复
如果你GOTO到后面的语句的话~GOTO中定义的一切东西都不能用于你后面用
比如:GOTO EE
INT NUM;
.......
......
EE:

MUN=0;

错了。。。。。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧