繁体   English   中英

为什么即使有条件我的循环也会终止?

[英]Why does my loop terminate even with a condition?

我试图获取用户输入并将其存储在数组Fib [i]中。 之后,打印Fib [i]数组。 当用户输入-1时,循环将退出,程序将结束。 但是我的代码没有打印或终止。

#include <stdio.h>

double Fib[50];//globally declared  
int fib(int n)
{
    int i;

    for(i=0; i<50; i++)
    {   
        scanf("%d", &Fib[i]); 
        if(i==-1)
         break;
       //printf("numbers entered %d\n", Fib[i]); // <- doesn't terminate if printf is here
    }
        printf("numbers entered %d\n", Fib[i]); //doesn't print anything??

}
int main()
{
    int i, n;
//calling the function
    fib(n);

return 0;

}

用户输入:

4
5
-1

预期产量:

Numbers entered 
4
5

第一个问题:您将Fib声明为double数组:

double Fib[50];

但是您使用%d读取值,这是为了读取int

scanf("%d", &Fib[i]); 

使用错误的格式说明符会导致未定义的行为 您大概想存储整数,因此将数组更改为int

int Fib[50];

接下来是数组突破条件:

if(i==-1)

i是您的数组索引,范围从0到49,所以永远不会如此。 您想在用户输入-1时停止,该值将在Fib[i]

if(Fib[i]==-1)

最后,打印数组:

printf("numbers entered %d\n", Fib[i]);

这不会打印数组。 它只是在i的最后一个索引处打印元素,并且该索引处的值始终为-1。 您需要一个单独的循环来打印值:

int j;
printf("numbers entered:\n");
for (j=0; j<i; j++) {
    printf("%d\n", Fib[j]);
}

这段代码有很多代码编写标准问题,但是您似乎是新手,所以为了您的理解,我进行了最小的更改

#include <stdio.h>

double Fib[50];//globally declared  
int fib(int n)
{
    int i,j;

    for(i=0; i<50; i++)
    {   
        scanf("%lf", &Fib[i]); 
        if(Fib[i]==-1)
         break;
    }  
    printf("numbers entered \n");
    for(int j=0;j<i;j++)
    {
        printf("%lf\n",Fib[j]);
    }
}
int main()
{
    int i, n;
    fib(n);
    return 0;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM