我是C ++的初学者,所以请帮我解释一下这个逻辑,
我创建了一张地图并输入了数据。此问题基于异常处理。如果我的尝试中有错误{...},例如。错误的数据类型输入,抛出catch()并执行mContinueOrNot()函数,但程序终止而没有获得cContinueCharacter的值。
void mSearchForCustomer()
{
try
{
int ncustomerid;
std::cout<< "\nEnter the Customer ID to Search \t";
if(!(std::cin >> ncustomerid))
{
throw (ncustomerid);
}
/*My Code*/
mContinueOrNot();
}
catch(int)
{
std::cout<< "\nWRONG INPUT\n";
mContinueOrNot();
}
}
void mContinueOrNot()
{
char cContinueCharacter;
std::cout<<"\nEnter 'Y' to continue \n";
std::cout<<"Continue????????? :\t";
std::cin>>cContinueCharacter;
if(cContinueCharacter == 'y' || cContinueCharacter == 'Y')
mChoice();
else
exit(0);
}
先谢谢
答案 0 :(得分:2)
在这种情况下,您不需要使用例外。这样做要简单得多:
if(!(std::cin >> ncustomerid)) {
std::cout<< "\nWRONG INPUT\n";
} else {
std::cout << "\nSeatch Result:\n";
...
}
mContinueOrNot();
另外,抛出一个int通常是一个坏主意。通常情况下,您应该只抛出从std::exception
派生的对象进行错误处理,或者在某些特殊情况下抛出不从它派生的对象(但您可能不会需要它)。
您通常希望使用异常来处理更复杂的错误。通常,您尝试一些可能在几个点失败的代码,然后捕获错误并在一个点处理它。例如,如果代码看起来像这样没有例外:
int innerFunction1() {
...
if (somethingWentWrong()) {
return SOME_ERROR;
}
...
return SUCCESS;
}
int innerFunction2() {
...
}
...
int outerFunction1() {
int errorCode;
if ((errorCode = innerFunction1()) != SUCCESS) {
return errorCode;
}
if ((errorCode = innerFunction2()) != SUCCESS) {
return errorCode;
}
...
}
int outerFunction2() {
int errorCode;
if ((errorCode = innerFunction3()) != SUCCESS) {
handleErrorInInnerFunction3(errorCode);
return errorCode;
}
...
}
...
int main() {
if (outerFunction1() != SUCCESS) {
handleError();
}
if (outerFunction2() != SUCCESS) {
handleError();
}
...
}
除了例外之外,它们看起来像这样:
class SomeException : public std::exception {
...
};
void innerFunction1() {
...
if (somethingWentWrong()) {
throw SomeException();
}
...
}
int innerFunction2() {
...
}
...
int outerFunction1() {
innerFunction1();
innerFunction2();
}
int outerFunction2() {
try {
innerFunction3();
catch (SomeException& e) {
handleErrorInInnerFunction3(e);
throw;
}
...
}
...
int main() {
try {
outerFunction1();
outerFunction2();
} catch (SomeException&) {
handleError();
}
...
}
你可能会看到为什么第二个例子比第一个例子更清晰。
答案 1 :(得分:1)
获得!(std::cin >> ncustomerid)
设置了std :: cin的错误状态,你必须先重置它才能读取它。