c++返回自定义结构类型-错误

标签 c++ pointers struct return

我今天开始学习 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;





}

最佳答案

您忘记返回执行递归的函数:

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

否则不这样做会导致未定义的行为。

关于c++返回自定义结构类型-错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15725149/

相关文章:

c++ - CMake 在 Windows 10 上构建 Tensorflow C++ 错误 : Test COMPILER_OPT_ARCH_NATIVE_SUPPORTED - failed

c++ - C++ 中的数组和覆盖 - 我可以重用同一个对象吗?

pointers - 如何在不使用反射的情况下优雅地在 golang 中动态调用方法?

delphi - 无需手动设置每个字段值即可将数据写入 PVirtualNode

c++ - 等价于 C++ 中结构初始化的 C 编程语言

c++ - 如何使用指针找到两个排序数组的并集?

c++ - 检查 C++ 指针是否有效(在 Objective-C(++) 中)

c - 了解指针(在 C 中): converting int pointer to char and changing values

c# - C# 中的结构对齐

c++ - C++中的结构继承