Один оператор if else не будет выполнен - PullRequest
1 голос
/ 18 июля 2011

Ниже приведен раздел, в котором у меня возникли проблемы с

        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, похоже, не выполняется вообще.То, что я пытаюсь сделать, это то, что в случае, если на карте не найдено ни одной переменной.substr (1), так это печатать первую ошибку, иначе (цветная строка находится на карте, но не совпадает с последней в векторе).ошибка "еще".Тем не менее, мой другой случай всегда печатает.Причина, по которой он модифицирован.substr (1), заключается в том, что изменение (в данном случае) начинается с /.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011
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->first для ключа и it->second для строкового значения), когда необходимо получить базовый string.

1 голос
/ 18 июля 2011

В вашем коде vec пусто, поэтому

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

ведет к неопределенному поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...