如何在循环使用全局变量后保留并获取其初始真实值?
你的问题根源在于全局变量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
相关产品推荐
相关产品推荐

