如何解决为什么会进入无限循环?
我是初学者。这是一个打印直角三角形的程序。高度和底面应该相同。例如,如果输入 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] 举报,一经查实,本站将立刻删除。