我希望用户输入任何整数n
。在下一行中,将输入n
空格分隔的整数。我想找出这些n
整数中的最小整数。
#include <stdio.h>
int main(void)
{
int x, y, z, a[x], p = -1, q;
scanf ("%d", &x);
y = 0, q = 0, z = 0;
while (z <= x - 1)
{
scanf ("%d", &a[y]);
if (a[y] <= p)
p = a[y];
y = y + 1;
z = z + 1;
}
printf ("%d\n", p);
return 0;
}
每次尝试在IDEONE上运行此代码时都会出现运行时错误。
答案 0 :(得分:3)
您的代码存在问题:
int x, y, z, a[x],
声明数组时,必须在运行时在编译时或(对于可变长度数组,在C99中引入)知道数组的大小。 a[x]
不是有效的声明,因为您在确定x
的值之前声明了数组。
您可以在C99或更高版本中使用以下内容:
int x, y, z, p = -1, q;
scanf ("%d", &x);
int a[x];
如果您使用的是C99之前的编译器,那么您需要弄清楚您希望代码处理的最大数量的输入整数,并将数组设置为该值。然后,您可以提示用户输入用户想要输入的整数,并将其存储在另一个变量中。验证该值后(为了确保它不大于数组的大小),您可以使用该变量来读取循环中的整数。
答案 1 :(得分:2)
您的一个问题是p = -1
的初始化。这意味着只有当if (a[y] <= p)
小于p
时,支票1
才会接受23 45 3 10
的较小值。因此,如果您传递一组值-1
,那么您仍然会获得最小值{{1}}。避免这种情况的一种方法是使用第一个输入值将其最小化。
答案 2 :(得分:1)
您声明a有一个未初始化的变量大小x
。为x分配一些值,声明a具有固定值,或者在读取x
的值后,使用动态内存分配为(例如使用malloc)分配内存,
答案 3 :(得分:0)
除了@verbose回答之外,不要设置p = -1
,而是将p
设置为最大值p = INT_MAX
。然后输入的第一个值将小于或等于它。