我正在为我的一个类编写一个MARIE汇编程序,并且我遇到了一个逻辑错误,涉及我的一个函数的控制结构。
我想要完成的是接收插入到我的向量中的所有数据,然后该数据被用于创建整数操作码数据以供显示。然而无论出于何种原因,我的if-else链之后我的嵌套for循环被忽略了。
除了这个逻辑错误之外,嵌套for循环中的代码似乎正常工作。
请注意,instructions
,hexNums
,secondPassData
,valueZ
和symBols
是我的向量。
有些澄清:
- If-Else链仅用于读取指令字并将
basedInt
设置为正确的十进制数,以便以后进行十六进制转换。- 以下代码中有一些特殊条件已标记。
- 如果没有特殊条件,则代码会检查
valueZ
处的instructions.at(i)
向量,以查看valueZ
元素是否在symBols
中。- 如果通过字符检查是
symBol
元素,则会将其hexNums
位置添加到basedInt
。- 如果不是,则会将其对应的
valueZ
元素从string
转换为int
,然后添加到basedInt
。- 这些元素被添加到
醇>secondPassData
向量中。
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;
}
}
答案 0 :(得分:0)
如果你在你的else-if链中点击了一个继续,那么你的main for循环将跳转到下一个迭代并跳过你的其余代码(在这种情况下你的嵌套for循环)