【发布时间】:2013-03-07 02:57:49
【问题描述】:
所以我已经连续几个小时在这个程序的一部分上工作了。我有几行代码已经困扰了我一个多小时。这没有任何意义。我一遍又一遍地阅读这些台词,并在脑海中思考它应该做什么,但它没有这样做!这可能是我一直忽略的一些愚蠢的错误(通常发生在我身上..),或者可能是由于缺乏睡眠/过去几个小时一直在努力。
程序很长,但我遇到问题的代码只有几行 - 所以我只会在需要时发布整个内容。
好的,下面简要介绍一下应该做什么:
我有一个向量,其中填充了手动设置的字符串(19 个,每个长度为 79 个字符)。这个一维向量将被视为二维向量 - 因为我试图保持它的基本。所以这个字符串向量,如果每行显示 1 个字符串,基本上会创建一个带有“.”矩形部分的网格。以及连接矩形部分的“#”路径。它应该得到一个 x 和 y 坐标,并传递给函数。它像二维向量一样循环并找到位置。它检查该位置的字符是否不是“。”或 '#' 否则,它将字符更改为 X 以标记其位置。我使用有效的 x,y 坐标设置测试,该坐标是“。”的位置。 - 问题就在 i cout "match found:::" 行之后,当程序运行时,它会显示 vLevel[i][j] = '.' 的值但是由于某种原因,它没有转到函数被调用 4 次的 else 语句,而我放置了 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);
}
}
}
}
}
粘贴时间距弄乱了,所以我试着清理一下。我不明白为什么它会跳过其他。就像我说的,我敢肯定,一旦解决了这个问题,我会感到很愚蠢。我需要睡觉哈哈。
如果您需要更多信息,请告诉我。提前致谢!
【问题讨论】:
标签: c++ logic if-statement