Это часть кода, который я пишу как дополнение на C. Я пытаюсь обнаружить отрицательные числа в массиве и заполнить этими отрицательными числами другой массив. А пока я хочу посчитать эти отрицательные числа.
Все это звучит довольно просто, и, кажется, все работает, пока я не напечатаю количество отрицательных элементов. Вот что я получаю: 6422204 числа отрицательные.
Я просто не могу понять, что не так, и даже если это хороший способ сделать это.
Вот код:
double arr[10] = {21, -3.4, 65, 7.6, -12, 66, 10, -2, 5, 135};
int length = sizeof(arr)/sizeof(double);
printf("There are %d numbers in the array.\n",length);
for(int i = 0; i < 10; i++)
{
printf("[%d]=%.1lf ", i, arr[i]);
}
int neg = 0;
double negative[10];
for(int j = 0; j < 10; j++)
{
if (arr[j] < 0)
{
negative[j] = arr[j];
neg++;
}
}
printf("\n\n%d numbers are negative.", &neg);
Спасибо за ответ!
Вы печатаете адрес neg.
Я предлагаю вам также использовать другую переменную индексации, чем j, для выходного массива. Везде, где есть неотрицательное значение, вы пропускаете этот элемент в negative, который тогда остается неинициализированным. Предлагаю вам проиндексировать с neg.
@WeatherVane: На самом деле, neg должен отлично работать, тебе не кажется?
@FredLarson: да, но OP делает не это, а использует j, как я уже писал.
@WeatherVane: Я знаю. Я просто предположил, что neg уже существует и подойдет для индексации negative.
@FredLarson спасибо за вашу помощь.
Считайте, что просто поместите negative[neg++] = arr[j]; внутрь if. Это устранит пробелы в вашем массиве negative.
Спасибо за ответы! Задача решена.





Удалите & из printf:
printf("\n\n%d numbers are negative.", neg);
&neg- удалите&.