我的代码有问题。它应该取自用户数量的数组,用户应该在1-100范围内写出他想要的数字。
此程序还应显示最小和最高的数字。如果我想要一个包含7个以上数字的数组,那么当我输入数字时它会崩溃。
每次遇到7号,程序都会崩溃。我不知道它为什么不起作用。
#include <stdio.h>
#include <stdlib.h>
int n, i, a;
int main ()
{
int tab[n];
printf("\nhow many elements you want to have?\n");
do
{
scanf ("%d", &n);
if ((n>30 || n<1))
printf("\ntoo high or too low\n");
}
while ((n<1 || n>30));
printf("\nyour number please:\n");
for(i = 0; i < n; i++)
{
do
{
printf("\nelement %d:", i+1);
scanf("%d", &a);
if ((a < 1 || a > 100))
printf("\nnumber too high or too low\n");
tab[i]=a;
}
while((a < 1 || a > 100));
}
printf("\nyour numbers:");
for (i=0; i<n; i++)
{
printf("\n%d", tab[i]);
}
int min = tab[0];
int max = tab[0];
for (i = 0; i<n; i++)
{
if (tab[i]> max)
max = tab[i];
if(tab[i]< min)
min = tab[i];
}
printf("\nsmallest: %d", min);
printf("\nbiggest: %d", max);
}
答案 0 :(得分:1)
这里的问题是这个声明:
int tab[n];
您正在声明一个可变长度数组(自C99起可用),其未初始化值为长度。我知道您希望为stdin
中要存储的数字腾出空间,但这不是正确的方法。
我看到两个解决方案:
30
个值,因此情况就属于这种情况)并将声明更改为int tab[30]
答案 1 :(得分:0)
如果您在声明printf("%d",sizeof tab);
之后添加int tab[n]
,程序将输出0
。
您在int n;
之外写了main()
,使其成为全局变量,默认情况下初始化为零,但在使用前没有给它任何其他值它在语句int tab[n];
中,因此在您的情况下它等于int tab[0]
。
要使用VLA,您必须在用户提供 tab[n]
后声明n
。
此错误导致未定义的行为,允许任何事情发生。因此,当您输入第二个数字时,您的程序可能会崩溃,或者如果您真的(非)幸运,它将永远不会崩溃。 7号没有任何神奇的力量。
答案 2 :(得分:-1)
你必须用C
来规定你的数组长度tab[100];