C++错误处理

C++错误处理,c++,error-handling,try-catch,user-input,C++,Error Handling,Try Catch,User Input,是否可以知道由systemcCmdInput启动的命令是否正确;失败,如果失败,则显示错误 cout << endl << "Enter command> "; getline(cin, cmdInput); try{ cin.clear(); const char *cCmdInput = cmdInput.c_str(); system(cCmdInput); }catch (...){ cout << "An err

是否可以知道由systemcCmdInput启动的命令是否正确;失败,如果失败,则显示错误

cout << endl << "Enter command> ";
getline(cin, cmdInput);
try{
    cin.clear();
    const char *cCmdInput = cmdInput.c_str();
    system(cCmdInput);
}catch (...){
    cout << "An error occurred";
}

首先,您不应该使用系统,因为这是一个很大的安全风险,特别是当您在上面的代码中使用来自用户的输入时。相反,请看一下exec函数系列

但为了回答您的问题,系统不会抛出任何异常。您需要检查它返回的内容,它通常会返回您运行的命令的状态代码。您需要查找正在使用的命令的返回代码,并对照这些代码检查值系统返回。通常,返回值为0表示成功

例如:

if(system(cCmdInput) != 0)
   cout << "Error" << endl;
系统是一个C函数,不抛出异常。相反,它返回一个值,如果执行成功,该值可用于解释

根据,

错误时返回的值为-1,例如fork2失败,并且 否则返回命令的状态


通常返回状态0表示成功。

实际上,在*nix和Windows中,系统函数将返回您运行的程序的进程退出代码

因此,要运行性能良好的程序,只需检查结果是否为0。按照惯例,流程退出代码0表示成功,任何其他值表示失败


但是请注意,许多Windows程序在生成错误指示进程退出代码的意义上表现不佳。您可以在Windows命令解释器中对此进行检查,最直接的方法是在运行程序后通过echo%errorlevel%进行检查。另一种方法是使用逻辑连接词&&和| |,例如myprog&&echo OK | | echo Bah,failed

你认为这条消息会有什么帮助?不要这样写代码。这还包括你使用的可怕的缩进。@close投票者:OP很可能想知道如何通过使用system来检测流程是否成功。实际上,对于*nix或Windows中表现良好的进程来说,这并不难。投票决定重新开放,请不要太快触动扳机:你本可以等几秒钟让OP解释。