C 为什么我的循环即使有条件也会终止?
我试图获取用户输入并将其存储在数组Fib[I]中。然后打印Fib[i]数组。当用户输入-1时,循环将退出,程序将结束。但我的代码没有打印或终止C 为什么我的循环即使有条件也会终止?,c,arrays,loops,break,C,Arrays,Loops,Break,我试图获取用户输入并将其存储在数组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==-
#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;
}
预期产出:
Numbers entered
4
5
这段代码有许多代码编写标准问题,但您似乎是新的,所以我只做了最小的更改,以供您理解
#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;
}
#包括
双Fib[50]//全球宣布
整数fib(整数n)
{
int i,j;
对于(i=0;i第一个问题:您将Fib
声明为double
的数组:
double Fib[50];
但是您可以使用%d
来读取值,该值用于读取int
:
scanf("%d", &Fib[i]);
int Fib[50];
使用错误的格式说明符调用。您可能希望存储整数,因此将数组更改为int
:
scanf("%d", &Fib[i]);
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]);
}
intj;
printf(“输入的数字:\n”);
for(j=0;ji不会是-1。i是你的循环变量。Fib[i]可能是-1在该循环中,i
怎么会是负的?另外,Fib
是一个双精度数组,你告诉scanf()
为其中的一个元素指定一个int。你的编译器不是在警告你吗?@Shawn用户输入将是-1,这将终止循环,因为我不能是-1。始终打开一组健康的警告,并注意它们。-Wall-Wextra
如果使用gcc或clang,则很好。我在看到你的代码后进行了更改。对于(i=0;i=0;i++){scanf(“%d”,&Fib[i]);if(Fib[i]=-1)//更改的break;}printf(“输入的数字”);//的新循环(j=0;jI匆忙写下了这篇文章,一些无情的人投票否决了我@Su.she。我编辑过,但我认为(Fib[I]=-1)是否是问题所在now@chux我更改了lf部分,但现在在循环结束后只打印-1.00000。对于(I=0;I=0;I++){scanf(“%lf”),&Fib[I]);if(Fib[I]=-1)//changed break;}printf(“输入的数字%lf\n”,Fib[i]);@Su。她只是确认代码是否工作@Su。她有时会将双精度中的1取为1.000000001,因此1!=1.000000001,所以你可能会得到一个错误,所以我修复了它,但现在它进入了0的无限循环。对于(i=0;i=0;i++){scanf%lf“,&Fib[i]);if(Fib[i]==-1)//changed break;}printf(“输入的数字”);for(j=0;j@Su.she您将scanf
格式说明符更改为%lf
,但将printf
一个保留为%d
。对所有人使用double
或对所有人使用int
。使用sizeof(Fib)
不正确,因为这是Fib
中的字节数,而不是元素数。我们使用i
,因为这是用户输入的最后一个值的索引,所以一旦j
点击i
,我们就可以停止。