首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的程序没有结束

我的程序没有结束
EN

Stack Overflow用户
提问于 2018-02-08 06:14:15
回答 3查看 273关注 0票数 0

我也是c++新手,我必须设计一个程序来确定前四个三角形平方数,输出结果就是我想要的样子,但它不会在打印前四个平方数后退出。我想不出会是什么。我不能按CTRL C,因为我会被扣分。这里的问题是什么?

代码语言:javascript
复制
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    //Prints name line
    cout<<"*********** BY: ********"<<endl;

    //Initializing
    const int HOW_MANY=4;
    int num=1;
    int tsn=0;
    int z=1;
    int x=0;
    //How many TSN it will find and be printed
    while (x<=HOW_MANY)
    { 
        //
        int sum=0;
        for (int y=0;y<512;y++)
        {
                sum+=y;
                tsn=pow(num,2);
                //Tests if the numbers are TSN
                if ((sum==tsn) || (num+1)/sqrt(num)==sqrt(num))
                {

                    //Prints 1-HOW_MANY TSN and what they are
                    cout<<"Square Triangular Number "<< z <<" is: "<< tsn <<endl;
                    z++;
                    x++;
                }
        }
        num++;
    }
    return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2018-02-08 06:18:59

x0开始。每次你找到并打印一个数字,它就会递增。您将继续执行此操作,只要使用x<=HOW_MANY

你说你的程序找到了4个数字,但仍在运行。命中4次后,x将为4。是4 <= 4吗?答案是肯定的,所以你的程序一直在运行。

将条件更改为x < HOW_MANY,或将x初始化为1

编辑

我做了一点小实验,结果是1,512范围内所有数字的总和是131328。第5个square triangle number1413721

这意味着在你找到第四个三角形数后,你将永远不会求出足够高的和来找到下一个三角形数。(译者注:这句话的意思是“never sum”)。这将导致您所看到的无限循环。

上面的答案仍然是正确的修复方法,但这就是您最终会出现无限循环的原因。

票数 0
EN

Stack Overflow用户

发布于 2018-02-08 06:19:35

如果为x = 0,那么您需要编写while (x<HOW_MANY)而不是while (x<=HOW_MANY)

票数 0
EN

Stack Overflow用户

发布于 2018-02-08 08:37:37

for应该用于迭代,while应该用于条件测试。

如前所述,问题在于您的x条件变量永远不会递增,从而使您走出外部循环。这是一个逻辑错误,可以通过为作业使用适当的控制结构来避免。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48674163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档