数组元素在C中未按正值或负值进行分配

问题描述 投票:0回答:2

基本上,我只是想按正数或负数对所有用户输入数字进行排序。到目前为止,我只是试图创建仅包含正整数的数组,但似乎无法正确处理。

一直坚持了一段时间,无法完全理解为什么我的程序将负整数分配给应该仅用于正整数的数组,尽管我的if语句另有指示。任何输入将不胜感激!

#include <stdio.h>
#include <stdlib.h>

int main() {   
    int num_of_elements = 0, i, j, x;
    int elements[num_of_elements];
    int positive_total = 0, negative_total = 0;
    int negative_elements[20];
    int positive_elements[20];

    printf("How many elements in N? \n:");
    scanf("%d", &num_of_elements);

    for (i=0; i<num_of_elements; i++) {
        printf("\nEnter element a%d. \n:", i+1);
        scanf("%d", &elements[i]);
    }

    for (j=0; j<num_of_elements; j++)
    {
        if (elements[j] > 0)
        {
            positive_elements[positive_total] = elements[j];
            positive_total++;
        } else if (elements[j] < 0) {
            negative_elements[negative_total] = elements[j];
            negative_total++;
        }
    }

    int num;
    for (num=0; num<=positive_total;num++) {
        printf("\npositive element %d is %d", num, positive_elements[num]);
    }

    int MAX_pos_element = 0;

    for (x=0; x<=positive_total; x++) {     
        if (MAX_pos_element < positive_elements[x]) {
            MAX_pos_element = positive_elements[x];
            printf("\n%d is larger than %d", MAX_pos_element, positive_elements[x]);
            printf("\nelement[%d] has the largest value: %d", x, MAX_pos_element);
        }
    }

    return 0;
}
c arrays sorting memory-management
2个回答
1
投票

使用:

int num_of_elements = 0, i, j, x;
int elements[num_of_elements];

您正在分配长度为[[zero的数组,因为num_of_elements仍为零。

使用以下内容:

printf("How many elements in N? \n:"); scanf("%d", &num_of_elements); int elements[num_of_elements];

现在num_of_elements已初始化。

((注意:您还应该检查scanf的返回值以确保已读取数字。)


0
投票
该程序最初无效并且具有未定义的行为。

您可能不会在执行时声明具有零个元素的可变长度数组

int num_of_elements = 0, i, j, x; int elements[num_of_elements];

您输入变量num_of_elements的正值后应声明数组。

例如

printf("How many elements in N? \n:"); scanf("%d", &num_of_elements); int elements[num_of_elements];

也在这样的循环中

for (num=0; num<=positive_total;num++) { printf("\npositive element %d is %d", num, positive_elements[num]); }

您必须使用条件num < positive_total而不是num <= positive_total
© www.soinside.com 2019 - 2024. All rights reserved.