所以我一直在为这个项目的一部分工作几个小时。我有几行代码让我困扰了一个多小时。它没有意义。我一遍又一遍地读着这些线条,想想它应该做些什么,但它没有做到!这可能是我一直忽视的一些愚蠢的错误(通常发生在我身上......),或者可能是因为睡眠不足/在过去的几个小时内一直在工作。
程序很长,但是我遇到问题的代码块只有几行 - 所以我只会在需要时发布整个程序。
好的,所以这里应该快速了解应该做的事情:
我有一个向量,用手动设置的字符串填充(19个,每个长度为79个字符)。这个1维向量将被视为2d向量 - 因为我试图保持它的基本。所以这个字符串向量,如果每行显示1个字符串,基本上会创建一个矩形部分为“。”的网格。以及连接矩形部分的“#”路径。它应该得到一个x和y坐标,传递给函数。它像2d矢量一样循环并找到位置。它会检查该位置的字符是否为“。”。或'#'else,它将char更改为X以标记其位置。我使用有效的x,y坐标设置测试,该坐标是'。'的位置。 - 问题就在我cout“match found :::”的行之后,当程序运行时,它显示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);
}
}
}
}
}
粘贴时,间距搞砸了,所以我试着把它清理一下。我不明白为什么它会跳过其他人。就像我说的,我相信一旦解决这个问题,我会感到愚蠢。我需要睡觉哈哈。
如果您需要更多信息,请与我们联系。先谢谢!
答案 0 :(得分:3)
看看:
if ((vLevel[i][j] != '.') || (vLevel[i][j] != '#'))
这将始终评估为true
。想一想。
(我认为您的意思是if((!=)&&(!=))
或if(!((==)||(==)))
。)