2013-09-08 3 views
-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.

+9

Когда вы написали 'a [x]', вы на мгновение подумали о том, что 'x' * есть * в этот момент в объявлении? – WhozCraig

+0

Проверьте ваше объявление на [x]. Что это значит? – pablo1977

+1

вы не можете иметь размер статического массива во время выполнения, например [x]. x не известно, когда инициализация выполняется для массива a [x]. – surender8388

ответ

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

Вы объявляете, что a имеет неинициализированный переменный размер x. Либо присвойте какое-либо значение x, объявите a фиксированное значение, либо используйте распределение динамической памяти, выделяющее память для (например, с malloc) после того, как вы прочитали значение x,

2

Ваша проблема заключается в инициализации p = -1. Это означало бы, что проверка if (a[y] <= p) будет принимать меньшие значения для p, только если они меньше 1. Итак, если вы передадите набор значений, например 23 45 3 10, то вы все равно получите минимальное значение -1. Один из способов избежать этого - минимизировать его с помощью первого входного значения.

0

В дополнение к @verbose ответ, а не установка p = -1, установите p на максимум int p = INT_MAX. Тогда первое введенное значение будет меньше или равно ему.