为变量分配“从文件读取”功能是否可以接受?

时间:2013-12-23 18:45:06

标签: c++ function

所以我有FRead函数从文件中读取数据。如果函数返回错误代码,我需要完成程序。这样做是否可以接受:

string check=FRead(vec);

如果检查有特定值,则输入一些if语句来完成程序。

当我调用该函数时,它是程序中唯一的实例,显然我不能多次调用它。它似乎工作正常,但我不太确定它是否是正确的方法。那么,有什么方法可以做我想做的事情吗?

我还有KRead函数从键盘读取输入,如果出现问题也会返回错误代码。我称之为

if(KRead=='ERROR')
   return 1

这样可以吗?

3 个答案:

答案 0 :(得分:1)

使用错误代码或异常总是更好。两者之间的选择取决于实施。我做了一些示例应用程序,一般解释字符串错误,错误代码和异常是什么。

字符串错误

这会有效,但它很难看,你也不知道在没有禁用GenerateError()函数的情况下定义了哪些错误。

#include <string>
#include <iostream>

class Example
{
public:
    std::string GenerateError(bool error)
    {
        if (error)
        {
            return "ERROR";
        }
        return "OK";
    };
};


int main() 
{
    Example example;

    if ("ERROR" == example.GenerateError(true))
    {
        return 1; // failure
    }
    return 0; // success
}

错误代码

使用enum指定可用的错误代码(在本例中为OkErrorError2)。这使代码更容易理解,它可以帮助您避免错误。使用枚举,您还可以使用switch

#include <string>
#include <iostream>

enum ErrorCodes
{
    Ok = 0,
    Error,
    Error2
    //...
};

class Example
{
public:    
    ErrorCodes GenerateError(bool error)
    {
        if (error)
        {
            return ErrorCodes::Error;
        }
        return ErrorCodes::Ok;
    };
};


int main() 
{
    Example example;

    // Regular if statement
    if (ErrorCodes::Ok == example.GenerateError(true))
    {
        return 1; // failure
    }
    else
    {
        return 0; // success
    }

    // switch statement
    switch (example.GenerateError(true))
    {
    case Error:
    case Error2:
        return 1; // failure
        break;
    case Ok:
        return 0; // success
        break;
    }

    return 0;
}

例外

例外情况稍微复杂一点,但绝对值得一试。当您希望强制该函数的用户对错误执行某些操作时,请使用异常。当函数不需要对错误执行操作时,最好使用错误代码。

#include <string>
#include <iostream>

class CustomException :public std::exception{
public:
    CustomException(const std::string m) :strMessage(m){}
    ~CustomException(void);
    const char* what(){ return strMessage.c_str(); }
private:
    std::string strMessage;
};

class Example
{
public:

    void GenerateError(bool error)
    {
        if (error)
        {
            throw CustomException("Critical error");
        }
        return;
    };
};


int main() 
{
    Example example;

    try
    {
        example.GenerateError(true);
    }
    catch (CustomException ce)
    {
        std::cerr << ce.what() << std::endl;
        return 1; // failure
    }
    return 0; // success
}

答案 1 :(得分:0)

在C ++中处理错误条件的一个好方法是让函数在出现问题时抛出异常。然后,您可以在调用时检查异常。请参阅http://www.cplusplus.com/doc/tutorial/exceptions/

答案 2 :(得分:0)

这很好。像其他人所说,你可以使用错误代码而不是字符串。