首页 > 解决方案 > 数组值在 C 中突然变化

问题描述

我正在制作一个具有全局数组的程序。在我为数组赋值并打印它们的函数中,一切都很好。但是,一旦我尝试在另一个函数中使用这些数组,突然间值就不同了。

    int *numeros;
    char *operadores;
    int num, num_operadores;

void crearArray() {

    int i;

    printf("How many numbers?\n");
    scanf("%d", &num);

    numeros = (int*)calloc(num, sizeof(int));
    operadores = (char*)calloc(num - 1, sizeof(char));
    num_operadores = num - 1;

    num += (num - 1);

    for (i = 0; i < num; i++) {

        if(i % 2 == 0 || i == 0) {
            printf("\t\nEnter a number: ");
            scanf("%d", &numeros[i]);
        }
        else {
            fflush(stdin);
            printf("\t\nEnter an operator: ");
            scanf("%c", &operadores[i]);
        }

    }

    printf("Array: ");

    for (i = 0; i < num; i++) {

        if(i % 2 == 0 || i == 0)
            printf("%d ", numeros[i]);

        else
            printf("%c ", operadores[i]);

    }

}


void crearArbol() {

    int i;

    printf("\n\nArrays:\n\t Numbers: ");

    for(i = 0; i < num_operadores + 1; i++)
        printf("\n\t\t Numeros[%d]: %d ", i, numeros[i]);

    printf("\n\t Operators: ");

    for(i = 0; i < num_operadores; i++)
        printf("\n\t\t Operadores[%d]: %c ", i, operadores[i]);

}

int main() {
    crearArray();

    crearArbol();

    return 0;
}

当然,打印数组并不是 crearArbol 的主要目的,但现在除了那个之外什么都没有,我似乎无法弄清楚它为什么会改变。

示例输出:

多少个数字?

3

输入一个数字:1

输入运算符:*

输入一个数字:2

输入运算符:/

输入一个数字:3

数组:1 * 2 / 3(从第一个函数 crearArray 打印的数组)

数组:数字:

数字[0]:1

数字[1]:0

数字[2]:2

运营商:

操作员[0]:

Operadores[1]: * (从第二个函数 crearArbol 打印的数组值)

提前感谢您的帮助!

标签: carrays

解决方案


您正在数组范围之外进行写入和读取。您正在使用i交替索引numeros和 then operadores,但这意味着i它始终是任一数组的两倍大。您需要除以i2 才能将其转换为可用索引。

num += (num - 1);

for (i = 0; i < num; i++) {

    if(i % 2 == 0 || i == 0) {
        printf("\t\nEnter a number: ");
        scanf("%d", &numeros[i / 2]);
    }
    else {
        fflush(stdin);
        printf("\t\nEnter an operator: ");
        scanf("%c", &operadores[i / 2]);
    }

}

我不会加倍num然后根据是否i可被两个整除来交替访问两个数组,而是保持num原样,而是在每次循环迭代时访问两个数组。

for (i = 0; i < num; i++) {

    printf("\t\nEnter a number: ");
    scanf("%d", &numeros[i]);

    if (i < num - 1)
        fflush(stdin);
        printf("\t\nEnter an operator: ");
        scanf("%c", &operadores[i]);
    }

}

推荐阅读