You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环使用全局变量后保留并获取其初始真实值?

你的问题根源在于全局变量n在循环过程中被直接修改了——第二个for循环里的n--、while和do-while循环里的n--都会直接改变全局n的初始值,导致后续输出时拿不到最初输入的数值。

要实现「使用全局变量同时保留初始值」,有两种最直接的解决方案:


方案1:提前保存初始值到临时变量

在读取用户输入的n之后,立刻用一个局部变量存储它的初始值,后续所有需要展示初始值的地方都用这个临时变量,循环里可以放心修改全局n:

修改后的完整代码:

int n;

int main () {
    cin >> n;
    // 保存初始值到临时变量
    int original_n = n;

    // 1st METHOD(n未被修改,正常输出)
    int sum = 0;
    for(int i=1 ; i<=n ; i++){
        sum=sum+i;
    }
    cout<<"\nThe sum of first "<<original_n<<" natural number is : "<<sum<<endl;


    // 2nd METHOD(循环修改n,但输出用original_n)
    int sum4=0;
    for( ; n>0 ; n--){
        sum4+=n;
    }
    cout<<"\nThe sum of first "<<original_n<<" natural number is : "<<sum4<<endl;


    // 恢复n的初始值,供后续循环使用
    n = original_n;

    // WHILE LOOP
    int sum1=0;
    while(n>0){
        sum1+=n;
        n--;
    }
    cout<<"\nThe sum of first "<<original_n<<" natural number is : "<<sum1<<endl;

    // 再次恢复n的初始值
    n = original_n;

    // DO WHILE LOOP
    int sum2=0;
    do{
        sum2+=n;
        n--;
    } while(n>0);
    cout<<"\nThe sum of first "<<original_n<<" natural number is : "<<sum2<<endl;

    return 0;
}

方案2:循环中使用全局变量的副本,不修改原变量

如果不想修改全局n,可以在每个循环里创建局部变量作为n的副本,循环操作这个副本,这样全局n的初始值会一直保留:

修改后的完整代码:

int n;

int main () {
    cin >> n;

    // 1st METHOD(保持不变)
    int sum = 0;
    for(int i=1 ; i<=n ; i++){
        sum=sum+i;
    }
    cout<<"\nThe sum of first "<<n<<" natural number is : "<<sum<<endl;


    // 2nd METHOD:用局部变量temp_n作为n的副本
    int sum4=0;
    int temp_n = n;
    for( ; temp_n>0 ; temp_n--){
        sum4+=temp_n;
    }
    cout<<"\nThe sum of first "<<n<<" natural number is : "<<sum4<<endl;


    // WHILE LOOP:使用局部副本
    int sum1=0;
    temp_n = n;
    while(temp_n>0){
        sum1+=temp_n;
        temp_n--;
    }
    cout<<"\nThe sum of first "<<n<<" natural number is : "<<sum1<<endl;


    // DO WHILE LOOP:使用局部副本
    int sum2=0;
    temp_n = n;
    do{
        sum2+=temp_n;
        temp_n--;
    } while(temp_n>0);
    cout<<"\nThe sum of first "<<n<<" natural number is : "<<sum2<<endl;

    return 0;
}

这两种方案都能保证全局变量n的初始值不被破坏,最终所有输出都会显示最初输入的数值,同时循环逻辑正常运行。

内容的提问来源于stack exchange,提问作者Shivam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:10:29