一个if else语句将不会执行

时间:2011-07-18 06:59:39

标签: c++ map if-statement

以下是我遇到问题的部分

        if(transition == *(vec.end()-1)) { //vec contains the ASCI code
            vec.pop_back();
            --vec_index;
            result.append(vec[vec_index]);
        } else if(colors.find(modified.substr(1)) == colors.end()) {
            cout << result << endl;
            cout << "\033[0;37m";
            cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: "
            //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: "
            << nlines << endl;
            exit(0);
        } else {
            cout << result << endl;
            cout << "\033[0;37m";
            cerr << "**ERROR: INVALID CLOSING COLOR TAG ON LINE: "
            //cerr << "**ERROR: OVERLAPPING CLOSING COLOR TAG ON LINE: "
            << nlines << endl;
            exit(0);
        }

在上面的代码中,我的else-if语句似乎根本不执行。我想要做的是当在地图中找不到modified.substr(1)时打印第一个错误否则(颜色字符串在地图中但它与向量中的最后一个不同)打印“别的”错误。但是,我的其他情况总是打印。之所以修改它.substr(1)是因为修改(在这种情况下)是以/.

开头的

2 个答案:

答案 0 :(得分:2)

transition = colors[modified.substr(1)];
如果不存在

将在map<> color;中创建一个条目,并将值初始化。这就是为什么你的else if条件永远不会成真的原因。使用map::find代替operator []查找条目。像,

map<string,string>::const_iterator it = colors.find(modified.substr(1)];

并使用it代替transition。您可以在需要获取基础it时取消引用it->firstit->second表示密钥,string表示字符串值。

答案 1 :(得分:1)

在您的代码中vec为空,所以

if(transition == *(vec.end()-1))

导致未定义的行为。