[英]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.