不能改变变量的值

Cout change the variable value

本文关键字:变量 能改变 不能      更新时间:2023-10-16

在main函数中,如果我调用cout << answer << "n";,最后的答案是改变。谁能给我解释一下为什么会这样?

#include <iostream>
    using namespace std;
int Even(int *num){
    return (*num)/2;
}

int Odd(int *num){
    return 3*(*num)+1;
}
int Cycle (int num){
        int cycle;
        while (num != 1){
        if( num%2 == 0 ){  
            num= Even(&num) ;
        }else{
            num = Odd(&num) ;
        }
        cycle++;
    }
        return  cycle+1 ;
}

int main(){
    int num1,num2,max=0,answer;
    cin>>num1;
    cin>>num2;
    for(int i = (num1 < num2 ?  num1 : num2) ; i<=num2 ; i++ ){
        answer = Cycle(i);
//Here is the PROBLEM
        cout << answer << "n";
        if(max < answer){
            max = answer;
        }
    }
    cout <<"Final Answer "<< max <<"n" ;
  return 0;
}

输入1 10

没有计数的输出最终答案20

问题不在cout

首先,你的OddEven函数不应该接受指针,因为你已经返回了值。

第二,您没有在Cycle函数中初始化变量cycle

下面的代码可以正常运行:

#include <iostream>
using namespace std;
int Even(int num){
    return (num)/2;
}

int Odd(int num){
    return (3*(num)+1);
}
int Cycle (int num){
    int cycle = 0;
    while (num != 1){
        if( num%2 == 0 ){
            num= Even(num) ;
        }else{
            num = Odd(num) ;
        }
        cycle++;
    }
    return  (cycle+1) ;
}

int main(){
    int num1,num2, max=0, answer;
    cin>>num1;
    cin>>num2;
    for(int i = (num1 < num2 ?  num1 : num2) ; i<=num2 ; i++ ){
        answer = Cycle(i);
        if(max < answer){
            max = answer;
        }
    }
    cout <<"Final Answer "<< max <<"n" ;
    return 0;
}