[英]Why doesn't this order of code work properly?
因此,我已经连续几个小时从事该程序的一部分。 我有几行代码现在困扰了我一个多小时。 只是没有意义。 我一遍又一遍地阅读台词,并在脑海中思考该怎么办,但它没有这样做! 这可能是我一直忽略的一个愚蠢错误(通常发生在我身上..),或者可能是由于过去几个小时缺乏睡眠/一直在努力工作。
该程序很长,但是我遇到的代码块只有几行-因此,我只会在需要时发布整个内容。
好的,这是此操作的简要概述:
我有一个向量,里面充满了手动设置的字符串(19个字符串,每个字符串长79个字符)。 这个一维向量将被视为2d向量-因为我正在尝试使其保持基本状态。 因此,如果此字符串向量每行显示1个字符串,则实际上会创建一个矩形截面为'。'的网格。 和连接矩形部分的“#”路径。 它应该获得传递给函数的x和y坐标。 它像2D向量一样循环遍历并找到位置。 它检查该位置的字符是否不是'。'。 或“#”,它将char更改为X以标记其位置。 我使用有效的x,y坐标(即“'”的位置)设置了测试。 -问题就在我提示“找到匹配项:::”的行之后。程序运行时,它显示vLevel [i] [j] ='。 但是由于某种原因,它不会转到else语句中,在该语句中该函数又被调用了4次,而我放置了cout语句。 这是网格的外观。 白色空格是空格..每行都是向量中的字符串:
.......
....... .......
.......##....... ..........................
....... ....... ..........................
....... .......................... ..........
....... ..........................#####..........
.......................... ..........
.......................... #
.......................... #
# #
# #
........ # ............ .......
........ # ............ .......
........ # ............ .... .......
........###############............ .... .......
........ ............####....
........ ............ ....
这是我要处理的代码部分:
void markPosition(vector<string> & vLevel, int x, int y){
cout << "x: " << x <<endl;
cout << "y: " << y <<endl;
bool doubleCheck = true; //extra bool I added for testing purposes
for( int i = 0; i < vLevel.size(); i++ ){
for( int j = 0; j < vLevel[i].size(); j++ ){
//displays if x and/or y are out of range
if (doubleCheck){
if ((x < 0) || (x > vLevel[i].size())){
cout << "X is out of range!" << endl;
doubleCheck = false;
}
if ((y < 0) || (y > vLevel.size())){
cout << "Y is out of range!" << endl;
doubleCheck = false;
}
}
else {
return;
}
if ((j == x) && (i == y)){
//////THIS IS THE PROBLEM LOL
cout << "match found::: " << vLevel[i][j] << endl;
if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#')){
cout << "Located in the blankness" << endl;
return;
}
else {
cout << "I don't get reached!!??" << endl;
vLevel[i][j] = 'X';
markPosition(vLevel,i-1,j);
markPosition(vLevel,i+1,j);
markPosition(vLevel,i,j+1);
markPosition(vLevel,i,j-1);
}
}
}
}
}
粘贴时间距弄乱了,所以我尝试将其清理一下。 我不明白为什么它会跳过其他情况。 就像我说的那样,我敢肯定一旦解决,我就会感到愚蠢。 我需要睡觉哈哈。
让我知道您是否需要更多信息。 提前致谢!
看着:
if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#'))
这将始终评估为true
。 想一想。
(我认为您的意思是if((!=)&&(!=))
或if(!((==)||(==)))
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.