if-else链后嵌套for循环被忽略

时间:2013-11-16 01:48:55

标签: c++ loops if-statement for-loop

我正在为我的一个类编写一个MARIE汇编程序,并且我遇到了一个逻辑错误,涉及我的一个函数的控制结构。

我想要完成的是接收插入到我的向量中的所有数据,然后该数据被用于创建整数操作码数据以供显示。然而无论出于何种原因,我的if-else链之后我的嵌套for循环被忽略了。

除了这个逻辑错误之外,嵌套for循环中的代码似乎正常工作。

请注意,instructionshexNumssecondPassDatavalueZsymBols是我的向量

有些澄清:

  
      
  1. If-Else链仅用于读取指令字并将basedInt设置为正确的十进制数,以便以后进行十六进制转换。
  2.   
  3. 以下代码中有一些特殊条件已标记。
  4.   
  5. 如果没有特殊条件,则代码会检查valueZ处的instructions.at(i)向量,以查看valueZ元素是否在symBols中。
  6.   
  7. 如果通过字符检查是symBol元素,则会将其hexNums位置添加到basedInt
  8.   
  9. 如果不是,则会将其对应的valueZ元素从string转换为int,然后添加到basedInt
  10.   
  11. 这些元素被添加到secondPassData向量中。
  12.   
int basedInt;
int newInt;
int pushInt;

string temp;

for(unsigned int i = 0; i < instructions.size(); ++i) //if i is less then instructions.size(), follow through with the statement
{

    if(instructions.at(i) == "JNS") //sets basedInt to a decimal version of its hexidecimal opcode 
    {
        basedInt = 0;
    }
    else if(instructions.at(i) == "HALT") //a special condition where the number is plugged into the secondPassData vector automatically
    {
        secondPassData.push_back(28672);
        continue;
    }
    else if(instructions.at(i) == "CLEAR") //same as above
    {
        secondPassData.push_back(-24576);
        continue;
    }
    else if(instructions.at(i) == "ADDL")
    else if(instructions.at(i) == "ORG")
    {
        secondPassData.push_back(0000);
        continue;
    }
    else if(instructions.at(i) == "HEX") //checks for the HEX psuedo-OP. 
    {
        temp = valueZ.at(i); //converts it at position i to a string

        basedInt = atoi(temp.c_str()); //converts that string to an int. 
        secondPassData.push_back(basedInt);//pushes into vector.
        continue; 
    }
    else if(instructions.at(i) == "DEC")
    {
        temp = valueZ.at(i);
        basedInt = atoi(temp.c_str()); //similar function as above. 
        secondPassData.push_back(basedInt);
        continue; 
    }
    else
    {
        cout << "Beep Boop, program borked!" << endl;
        return; 
    }

    //for some reason the code below is getting ignored. 
    cout << i << endl;

    for(unsigned int a = 0; a < instructions.size(); ++a) //works
    {
        cout << i << " " << a << endl;

        string valFind = valueZ.at(i);
        string symFind = symBols.at(a); //works

        temp = valueZ.at(i);
        if(symFind[0] == valFind[0])
        {
            newInt = hexNums.at(a);

            pushInt = basedInt + newInt;
            secondPassData.push_back(pushInt);
            break;    
        }
        else if(symFind[0] != valFind[0]) //works 
        {
            temp = valueZ.at(i);
            newInt = atoi(temp.c_str()); //works
            pushInt= basedInt + newInt; 

            secondPassData.push_back(pushInt); //works 
            break; 
        }
        break; 
    }
}

1 个答案:

答案 0 :(得分:0)

如果你在你的else-if链中点击了一个继续,那么你的main for循环将跳转到下一个迭代并跳过你的其余代码(在这种情况下你的嵌套for循环)

continue