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

用于在输入值中查找最小整数的C程序,c,C,我希望用户输入任意整数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

我希望用户输入任意整数
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;
}
#包括
内部主(空)
{
int x,y,z,a[x],p=-1,q;
scanf(“%d”和&x);
y=0,q=0,z=0;

当(z您声明a具有未初始化的变量大小
x
时。在您读取
x
的值后,要么将一些值指定给x,要么将a声明为具有固定值,或者使用动态内存分配为a分配内存(例如使用malloc),代码的问题如下所示:

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

您的一个问题是
p=-1
的初始化。这意味着检查
如果(a[y]除了@verbose answer之外,不要设置
p=-1
,而是将
p
设置为最大int
p=int\u MAX
。然后输入的第一个值将小于或等于它。

当您编写
a[x]时
,您是否想过,即使有一瞬间,decl中此时的
x
是什么?检查您的声明a[x]。这意味着什么?在运行时不能有静态数组大小,如a[x]。对数组a[x]进行初始化时,x是未知的。在编译器中启用所有警告和调试信息。了解有关指针和堆分配的更多信息(例如…。@surender8388不确定这是什么意思。C从1999年起就有可变长度数组。(是的,OP使用它们的方式不对,但那是另一回事。)