C++ 为什么我最终需要从while条件中减去7才能使代码正常工作

C++ 为什么我最终需要从while条件中减去7才能使代码正常工作,c++,C++,我对编码是新手,我正在尝试打印fabonacci序列,我无法理解为什么我不能在不从while循环条件中减去7的情况下获得正确的输出。谁能告诉我如何解决这个问题 #include<iostream> #include<cmath> using namespace std; int main (){ double y; double z; int x; cout <<"Enter the number you wan

我对编码是新手,我正在尝试打印fabonacci序列,我无法理解为什么我不能在不从while循环条件中减去7的情况下获得正确的输出。谁能告诉我如何解决这个问题

#include<iostream>
#include<cmath>

using namespace std;

int main (){
    double y;
    double z;
    int x;

    cout <<"Enter the number you want to find the sequence of :";
    cin>>x;

    int zero = 1;

    cout<<"Sequence equal to or less than "<<x<<" is :"<<"0";

    do {
        z = (pow(1.618,zero)-pow(-0.618,zero))/2.236;
        zero++;
        y=ceil(z);
        cout<<","<<y;
    } while(y<=x-7);
}
#包括
#包括
使用名称空间std;
int main(){
双y;
双z;
int x;
cout x;
int零=1;
难道你“需要”减去7,因为您希望打印的最后一个值小于
x
,但在打印后要检查条件。将
-7
放置有时会使打印的最后一个值小于
x
,但并非总是如此。尝试
x=123
获得输出
0,1,1,2,3,5,8,13,21,34,55,89144
x=3
获取
0,1
,而它应该是
0,1,1,2,3

要先修复代码,请检查条件,然后再打印:

do {
    z = (pow(1.618,zero)-pow(-0.618,zero))/2.236;
    zero++;
    y=ceil(z);
    if (y <= x) {
        cout<<","<<y;
    } else {
        break;
    }
} while(true);
do{
z=(功率(1.618,零)-功率(-0.618,零))/2.236;
零++;
y=细胞(z);
如果(y你“需要”减去7,因为您希望打印的最后一个值小于
x
,但在打印后要检查条件。将
-7
放置有时会使打印的最后一个值小于
x
,但并非总是如此。尝试
x=123
获得输出
0,1,1,2,3,5,8,13,21,34,55,89144
x=3
获取
0,1
,而它应该是
0,1,1,2,3

要先修复代码,请检查条件,然后再打印:

do {
    z = (pow(1.618,zero)-pow(-0.618,zero))/2.236;
    zero++;
    y=ceil(z);
    if (y <= x) {
        cout<<","<<y;
    } else {
        break;
    }
} while(true);
do{
z=(功率(1.618,零)-功率(-0.618,零))/2.236;
零++;
y=细胞(z);

如果(y问题是在这个循环中发生了太多事情:

int zero = 1;
do {
    z = (pow(1.618,zero)-pow(-0.618,zero))/2.236;
    zero++;
    y=ceil(z);
    cout<<","<<y;
} while(y<=x-7);
您可以使用更自然的循环构造来解决此问题:

for(int zero = 1; (y = fib(zero)) <= x; ++zero)
        std::cout<<","<<y;
这有一个很好的优点,它可以用于不同的目的,并且可以永远生成斐波那契数

现在,您的循环可以进行所需的比较:

for(int y : fib_nums | std::views::take_while([x](int y) { return y <= x; }))
    std::cout << "," << y;

for(int y:fib_nums | std::views::take_while([x](int y){return y问题是在这个循环中发生了太多事情:

int zero = 1;
do {
    z = (pow(1.618,zero)-pow(-0.618,zero))/2.236;
    zero++;
    y=ceil(z);
    cout<<","<<y;
} while(y<=x-7);
您可以使用更自然的循环构造来解决此问题:

for(int zero = 1; (y = fib(zero)) <= x; ++zero)
        std::cout<<","<<y;
这有一个很好的优点,它可以用于不同的目的,并且可以永远生成斐波那契数

现在,您的循环可以进行所需的比较:

for(int y : fib_nums | std::views::take_while([x](int y) { return y <= x; }))
    std::cout << "," << y;

for(inty:fib_nums | std::views::take_while([x](inty){返回y谢谢你帮助我,先生。谢谢你帮助我,先生。谢谢你的帮助:)谢谢你的帮助:)