在c ++中返回垃圾值而不是0或1

时间:2016-01-21 11:38:34

标签: c++

我试图在c ++中从以下方法返回整数:

int check_for_chef(string str1,string str2,int M,int N)
{
    if ( N == -1 )
    {
        cout << "I am returning 1." <<endl;
        return 1;
    }
    else if ( N > M )
    {
        cout << " I am returning 0." <<endl;
        return 0;
    }
    else
    {
        if ( str1[M] == str2[N])
        {
            location[N] = M;
            cout << "location is: "<<location[N]<<endl;

            check_for_chef(str1,str2,M - 1, N - 1);
        }
        else
        {
            check_for_chef(str1,str2,M - 1, N);
        }
    }

}

但是,我在回来时得到的是:

Returned value is: 35668224

整个代码在这里:

#include <iostream>
#include <string>

using namespace std;

int location[4];

int check_for_chef(string str1,string str2,int M,int N)
{
    if ( N == -1 )
    {
        cout << "I am returning 1." <<endl;
        return 1;
    }
    else if ( N > M )
    {
        cout << " I am returning 0." <<endl;
        return 0;
    }
    else
    {
        if ( str1[M] == str2[N])
        {
            location[N] = M;
            cout << "location is: "<<location[N]<<endl;

            check_for_chef(str1,str2,M - 1, N - 1);
        }
        else
        {
            check_for_chef(str1,str2,M - 1, N);
        }
    }

}




int main()
{
    int count = 0;

    string original_string;
    cin >> original_string;

    string chef = "CHEF";

    int M = original_string.size();
    int N = 4;

    while ( 1 )
    {
        cout << "Returned value is: " << check_for_chef(original_string,chef,M - 1, N - 1);
        cout << " i am in while."<<endl;
        count++;

        original_string.erase(location[3],1);

        cout << "the original_string : " << original_string <<endl;


        original_string.erase(location[2],1);

        cout << "the original_string : " << original_string <<endl;


        original_string.erase(location[1],1);

        cout << "the original_string : " << original_string <<endl;


        original_string.erase(location[0],1);

        cout << "the original_string : " << original_string <<endl;



        cout << "the original_string : " << original_string <<endl;

        M = original_string.size();
        cout << "size is :" << M <<endl;

        if ( M < N )
            break;

    }

    cout << count <<endl;


}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:8)

我在代码

中看不到另外两个return

我在下面的注释行中添加了:

int check_for_chef(string str1,string str2,int M,int N)
{
    if ( N == -1 )
    {
        cout << "I am returning 1." <<endl;
        return 1;
    }
    else if ( N > M )
    {
        cout << " I am returning 0." <<endl;
        return 0;
    }
    else
    {
        if ( str1[M] == str2[N])
        {
            location[N] = M;
            cout << "location is: "<<location[N]<<endl;

            return check_for_chef(str1,str2,M - 1, N - 1); // here 1st RETURN
        }
        else
        {
            return check_for_chef(str1,str2,M - 1, N); // here 2nd RETURN
        }
    }

}

答案 1 :(得分:3)

您的代码不会在else分支中显式返回任何内容。 x84中的值通常通过EAX寄存器返回,因此如果您不返回任何内容 - 它的行为类似于未初始化的变量。