【问题标题】:Array elements not allocating by positive or negative values in C数组元素不按 C 中的正值或负值分配
【发布时间】:2020-03-19 22:17:34
【问题描述】:

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

在此问题上停留了一段时间,无法完全理解为什么我的程序将负整数分配给我的数组,而我的数组应该只用于正整数,尽管我的 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;
}

【问题讨论】:

  • num&lt;=positive_total 中,您应该使用&lt;,因为您的程序中的索引来自0..n-1
  • 我爱你@PaulOgilvie

标签: c arrays sorting memory-management


【解决方案1】:

与:

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];

现在num_of_elements 已初始化。

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

【讨论】:

    【解决方案2】:

    程序最初是无效的并且具有未定义的行为。

    你不能像你正在做的那样声明一个元素数量为零的可变长度数组

    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 &lt; positive_total 而不是num &lt;= positive_total

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多