C程序,用于查找输入值中的最小整数

时间:2013-09-08 07:01:23

标签: c

我希望用户输入任何整数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上运行此代码时都会出现运行时错误。

4 个答案:

答案 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。然后输入的第一个值将小于或等于它。