微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么会进入无限循环?

如何解决为什么会进入无限循环?

我是初学者。这是一个打印直角三角形的程序。高度和底面应该相同。例如,如果输入 n = 3 那么我们应该得到输出

*
* *
* * *

我为此编写了以下代码

#include<iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        while(i>=1){
            cout<<"*";
            cout<<" ";
            i--;
            cout<<i;
        }
        cout<<"\n";
    }

}

但它会一直持续下去。有什么问题吗?

解决方法

您在 while 循环中递减 i 并在 for 循环中递增。使用单独的变量 j

using namespace std;

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int j = i;
        while(j>=1){
            cout<<"*";
            cout<<" ";
            j--;
            cout<<j;
        }
        cout<<"\n";
    }

}
,

问题是,退出while循环后,i的值变回1,for循环又从i=1开始,导致无限循环

您可以将 i 的值存储到另一个变量中,例如 j 并使用此 j 来执行 while 循环 这是代码:

ts.createProgram

输出:

#include<iostream>
using namespace std;

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int j=i;
        while(j>=1){
            cout<<"*";
            cout<<" ";
            j--;
            cout<<j;
        }
        cout<<"\n";
    }

}
,

发生这种情况是因为您的 while 循环将 i 恢复为 0,然后您的 for 循环每次都从 0 开始。

解决方案是使用其他变量进行内循环:

#include<iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        for (int j = 0; j <= i; j++) {
            cout << "* ";
        }
        cout << '\n';
    }
}
,

程序中的主要问题是变量 i 被内循环和外循环共享。内部 while loop 试图将 i 的值修改为 0 i 的值由外部 for-loop 递增 1,再次控制返回到 while 循环并将 i 的值设为 0。这在导致无限循环的后续步骤中重复。

为避免这种歧义,建议为内部 while 循环使用另一个变量 j

请查看下面解决此问题的修改后的代码:

#include<iostream>
using namespace std;

    int main(){
        int n;
        cin>>n;
        int j;
        for(int i=1;i<=n;i++){
            j=i;
            while(j>=1){
                cout<<"*";
                cout<<" ";
                j--;
                cout<<j;
            }
            cout<<"\n";
        }
    
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。