-3

我希望用户输入任何整数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

4 回答 4

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 之前的编译器,那么您需要确定您希望代码处理的最大输入整数数,并将数组设置为该数。然后,您可以提示用户输入用户想要输入的整数数量,并将其存储在不同的变量中。验证该值后(以确保它不大于数组的大小),您可以使用该变量在循环中读取整数。

于 2013-09-08T07:14:05.220 回答
2

你的一个问题是初始化p = -1. 这意味着只有当它们小于 时,检查if (a[y] <= p)才会接受较小的值。因此,如果您传递一组像 的值,那么您仍然会得到 的最小值。避免这种情况的一种方法是使用第一个输入值将其最小化。p123 45 3 10-1

于 2013-09-08T07:18:02.770 回答
1

您正在声明 a 具有未初始化的变量 size x。为 x 分配一些值,声明 a 具有固定值,或者在您读取 的值后使用动态内存分配为 a 分配内存(例如使用 malloc)x

于 2013-09-08T07:09:46.507 回答
0

除了@verbose 答案,而不是设置p = -1,设置p为最大 int p = INT_MAX。然后输入的第一个值将小于或等于它。

于 2013-09-10T19:37:24.100 回答