首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确的try-catch设计

正确的try-catch设计
EN

Stack Overflow用户
提问于 2020-09-26 13:40:54
回答 1查看 37关注 0票数 0

如何才能使try-catch不会输出两次错误?下面的代码仅用于识别snap、csg、cdh和cr。它像这样打印出来:

代码语言:javascript
复制
Input Strings:
snap(12345,Charlie Brown,Manager,555-1234).

snap(67890,Lucy,Right Field,555-5678).
csg(CS101,12345,A).

csg(CS101,67890,B).

csgs(CS101,67890,B). // i want to get rid of this

**Error: csgs(CS101,67890,B). // repeat
cdh(CS101,M,9AM).

cr(CS101,1170 TMCB).

下面是我的代码:

代码语言:javascript
复制
out << "Input Strings:" << endl;



for (string line; getline(in, line);) {
    out << line;

    try {

        if ("snap(" == line.substr(0, 5)) {
            string studentID = line.substr(5, line.find(',') - 5);
            line = line.substr(line.find(',') + 1);
            string studentName = line.substr(0, line.find(','));
            line = line.substr(line.find(',') + 1);
            string studentAddress = line.substr(0, line.find(','));
            line = line.substr(line.find(',') + 1);
            string studentPhone = line.substr(0, line.find(')'));

            snaps.emplace_back(studentID, studentName, studentAddress, studentPhone);
            continue;
        }
        else if ("csg(" == line.substr(0, 4)) {
            string courseName = line.substr(4, line.find(',') - 4);
            line = line.substr(line.find(',') + 1);
            string studentID = line.substr(0, line.find(','));
            line = line.substr(line.find(',') + 1);
            string studentGrade = line.substr(0, line.find(')'));

            csg.emplace_back(courseName, studentID, studentGrade);
            continue;
        }
        else if ("cdh(" == line.substr(0, 4)) {
            string courseName = line.substr(4, line.find(',') - 4);
            line = line.substr(line.find(',') + 1);
            string courseDay = line.substr(0, line.find(','));
            line = line.substr(line.find(',') + 1);
            string courseTime = line.substr(0, line.find(')'));

            cdh.emplace_back(courseName, courseDay, courseTime);
            continue;
        }
        else if ("cr(" == line.substr(0, 3)) {
            string courseName = line.substr(3, line.find(',') - 3);
            line = line.substr(line.find(',') + 1);
            string courseRoom = line.substr(0, line.find(')'));

            cr.emplace_back(courseName, courseRoom);
            continue;
        }
        throw string(line);

    }
    catch (const runtime_error& error) { out << endl << "**Error: " << error.what(); }
    catch (const string& e) { out << endl << "**Error: " << e; }

}
in.close();
EN

回答 1

Stack Overflow用户

发布于 2020-09-26 14:11:30

显然,您需要移动out << line;,以便只有在您知道没有错误时才打印它。

我看不出在这段代码中需要异常。异常真的应该为异常情况保留,跳过坏数据并不是真的那样。此外,continue语句通常被认为是不好的风格,同样是因为它们会中断程序的正常流程,使其难以理解。

这是没有异常和没有continue的重写代码。您真正需要做的就是处理else子句中的错误情况,并将行的打印移动到循环的末尾。

代码语言:javascript
复制
out << "Input Strings:" << endl;
for (string line; getline(in, line);) {
    if ("snap(" == line.substr(0, 5)) {
        string studentID = line.substr(5, line.find(',') - 5);
        line = line.substr(line.find(',') + 1);
        string studentName = line.substr(0, line.find(','));
        line = line.substr(line.find(',') + 1);
        string studentAddress = line.substr(0, line.find(','));
        line = line.substr(line.find(',') + 1);
        string studentPhone = line.substr(0, line.find(')'));

        snaps.emplace_back(studentID, studentName, studentAddress, studentPhone);
    }
    else if ("csg(" == line.substr(0, 4)) {
        string courseName = line.substr(4, line.find(',') - 4);
        line = line.substr(line.find(',') + 1);
        string studentID = line.substr(0, line.find(','));
        line = line.substr(line.find(',') + 1);
        string studentGrade = line.substr(0, line.find(')'));

        csg.emplace_back(courseName, studentID, studentGrade);
    }
    else if ("cdh(" == line.substr(0, 4)) {
        string courseName = line.substr(4, line.find(',') - 4);
        line = line.substr(line.find(',') + 1);
        string courseDay = line.substr(0, line.find(','));
        line = line.substr(line.find(',') + 1);
        string courseTime = line.substr(0, line.find(')'));

        cdh.emplace_back(courseName, courseDay, courseTime);
    }
    else if ("cr(" == line.substr(0, 3)) {
        string courseName = line.substr(3, line.find(',') - 3);
        line = line.substr(line.find(',') + 1);
        string courseRoom = line.substr(0, line.find(')'));

        cr.emplace_back(courseName, courseRoom);
    }
    else {
        out << endl << "**Error: ";
    }
    out << line << endl;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64074275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档