我的数组中的偶数位置自动变为0.你能修复我的代码吗?

时间:2017-05-10 18:38:21

标签: c

我编写了这个程序,要求你从元素编号1输入一维数组中的元素值,当你输入值0时它会停止。

void main() {
    int *A;
    int n, j, B;
    int i = 1;

    A = malloc(i * sizeof(int));
    printf("Enter the element A[%d] = ", i);
    scanf("%d",&A[i]);
    while (i>=1) {
        if (A[i] != 0) {
            i = i + 1;
            A = realloc(A, i * sizeof(int));
            printf("Enter the element A[%d] = ",i);
            scanf("%d",&A[i]);
        } else {
            break;
        }
    }

    for (j = 1 ; j <= i; j++) {
        printf("\t%d", A[j]);
    }

    for (j = 1; j <= i; j++) {
        free(A[j]);
    }
}

结果如下:image 1image 2

正如你所看到的,甚至地方都被替换为0.我无法弄清楚为什么以及如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

以下提议的代码

  1. 干净地编译
  2. 将评论中列出的所有问题更正为OP问题
  3. 执行所需的功能
  4. 现在是代码

    #include <stdio.h>   // scanf(), printf(), perror()
    #include <stdlib.h>  // realloc(), exit(), EXIT_FAILURE
    
    
    int main( void )
    {
        int *A = NULL;
        int temp;
        size_t i = 0;
    
        printf("Enter the element A[%lu] = ", i+1);
        while( 1 == scanf("%d",&temp) )
        {
            int* tempRealloc = realloc(A, (i+1) * sizeof(int));
            if( !tempRealloc )
            {
                perror( "realloc failed" );
                free( A ); // cleanup
                exit( EXIT_FAILURE );
            }
    
            // implied else, realloc successful
    
            A = tempRealloc;
    
            A[i] = temp;
            i++;
    
            if( !temp )  // 0 entered by user
                break;
    
            printf("Enter the element A[%lu] = ",i+1);
        }
    
        for (size_t j = 0 ; j < i; j++)
        {
            printf("\t%d", A[j]);
        }
    
        free( A );
    } // end function: main