-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

あなたの 1 つの問題は、の初期化ですp = -1。これは、 より小さい値の場合にのみチェックif (a[y] <= p)がより小さい値を受け入れることを意味します。したがって、 のような一連の値を渡しても、最小値は になります。これを回避する 1 つの方法は、最初の入力値で最小化することです。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 に答える