我试图获取用户输入,并将它们存储在一个数组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 Fib[50];
但是您使用%d
读取值,这是用于读取int
:
scanf("%d", &Fib[i]);
使用错误的格式说明符会调用未定义的行为。您可能希望存储整数,因此将数组更改为<code>int</code>:
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;
}