我在开发C ++中有一个C ++代码,突然间它只是说项目1.exe已停止工作,我不知道为什么
#include <iostream>
using namespace std;
int main()
{
char *upasscode;
char *spasscode;
spasscode = ("FISH");
cout<<"ENTER PASWWORD\n";
cout<<"--------------\n";
cin>> upasscode;
if ( upasscode != spasscode ) {
goto incorrect;
}
else {
goto correct;
}
incorrect:
cout<<"INCORRECT";
system("pause>null");
system("EXIT");
correct:
cout<<"Welcome!";
system("pause>null");
system("EXIT");
}
答案 0 :(得分:1)
一个问题是,您的incorrect
代码会流入您的correct
代码,没有任何内容可以改变执行路径。
如果您喜欢goto
,我建议如下:
incorrect:
cout<<"INCORRECT";
system("pause>null");
system("EXIT");
goto end_of_program;
correct:
cout<<"Welcome!";
system("pause>null");
system("EXIT");
end_of_program:
return 0;
或者你可以简化:
incorrect:
cout<<"INCORRECT";
goto end_of_program;
correct:
cout<<"Welcome!";
end_of_program:
system("pause>null");
return 0;
唉,可能还有更好的东西:
int main()
{
char *upasscode;
char *spasscode;
spasscode = ("FISH");
cout<<"ENTER PASWWORD\n";
cout<<"--------------\n";
cin>> upasscode;
if ( upasscode != spasscode )
{
cout << "INCORRECT\n";
}
else
{
cout << "Welcome!\n";
}
system("pause>null");
return EXIT_SUCCESS;
}
你真的需要system("EXIT")
函数调用还是从main
返回(退出)就足够了?
答案 1 :(得分:0)
cin >> upasscode;
upasscode
是char*
,没有分配内存。当您将输入提取到upasscode
时,您将解除引用您不拥有的地址,从而解除未定义的行为。
相反,您可以使用std::string
来动态调整自身大小以容纳额外的字符。
std::string spasscode; std::cin >> spasscode;
此外,你正在使用goto
这是一个非常糟糕的编程习惯。您总是可以以更好的方式重构您的程序。