2013-03-31 59 views
0

我今天開始學習C++,目前有一些問題。C++返回一個自定義結構類型 - 錯誤

我有一個自定義的結構,我叫數據:

struct data{ 
int x, y, l; 
}; 

它只需用3個變量結構。

接下來我運行這個遞歸函數。儘管如此,打印出最終的返回語句會得出正確的結果並不重要。

data finds(int x, int y, int length, string s){ 
    //cout << length << endl; 
    int nx = prev(x, s); 
    int ny = next(y, s); 
    if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){ 
     finds(nx, ny, length + 2, s); 
    } 
    else{ 

     cout << x << y << length << endl; 
     data vals; 
     vals.x = x; 
     vals.y = y; 
     vals.l = length; 
     return vals; 
    } 
} 

在這個函數的聲明COUT產生

068 

這是我想要的數字。然而,當我嘗試打印這樣的功能的結果是這樣的:

464078426865241 

這顯然是錯誤的。

我的問題變成:我如何正確地返回一個結構來產生正確的值。

而且你可能想一些運行的代碼:

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
struct data{ 
    int x, y, l; 
}; 
int next(int i, string s){ 
    //cout << s; 
     //cout << j; 
    for(int j = i + 1; j < s.size(); j++){ 
     if(isalnum(s.at(j))){ 
      return j; 
     } 
    } 
    return -1; 
} 

int prev(int i, string s){ 
    //cout << s; 
    for(int j = i - 1; j >= 0; j--){ 
     //cout << j; 
     if(isalnum(s.at(j))){ 
      return j; 
     } 
    } 
    return -1; 
} 
data finds(int x, int y, int length, string s){ 
    //cout << length << endl; 
    int nx = prev(x, s); 
    int ny = next(y, s); 
    if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){ 
     finds(nx, ny, length + 2, s); 
    } 
    else{ 

     cout << x << y << length << endl; 
     data vals; 
     vals.x = x; 
     vals.y = y; 
     vals.l = length; 
     return vals; 
    } 
} 

int main(){ 
    s = "1233321"; 
    data val; 
    val = finds(3, 3, 2, s); 

    cout << val.x << val.y << val.l; 





} 
+0

打開警告級別,您應該發現一些未定義的行爲。 – chris

+0

不能編譯vs2012 – gongzhitaao

回答

1

你忘了返回做遞歸函數:

return finds(nx, ny, length + 2, s); 
^^^^ 

否則不這樣做導致不確定的行爲。

+0

感謝您的提示,但似乎並沒有解決它。但是,我想我現在知道這個問題! – Tom