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

问题描述 投票:2回答:2

我试图获取用户输入并将它们存储在数组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
c arrays loops break
2个回答
4
投票

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

double Fib[50];

但是你使用%d来读取值,这是用于读取int

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

使用错误的格式说明符调用undefined behavior。你可能想存储整数,所以将数组更改为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]);
}

1
投票

这段代码有许多代码编写标准问题,但似乎你是新的,所以我只是为了你的理解做了很少的改动

#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;

}
© www.soinside.com 2019 - 2024. All rights reserved.