首页 > 解决方案 > While循环使用realloc,打印时不会更新数组

问题描述

该代码不会产生编译器错误,但如果用户键入Y,我会尝试在每次循环后更新内存分配,并增加内存大小。但是在第一个 while 循环之后,当我尝试使用第一个 for 循环打印数字列表时,它只会显示一个数字0.00000。我无法让它更新(这是我在第二个 if 循环中尝试做的事情)。任何帮助表示赞赏。

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

int main()
{
    double *userNum = (double*)malloc(sizeof(double));
    double sum = 0;
    char userChar = 'Y';
    int i = 0;
    int j = 0;

    if (userNum == NULL) {
            printf("Error with memory");

            return 1;
    }

    while (userChar == 'Y' || userChar == 'y') {

            printf("Enter a number\n");
            scanf("%lf", userNum);

            printf("List of numbers:\n");
            for (j; j < (i + 1); j++) {
                    printf( "%lf\n", userNum[j]);
            }

            printf("More numbers (Y/N)? \n");
            getchar();
            scanf("%c", &userChar);


            if (userChar == 'Y' || userChar == 'y') {
                    userNum = realloc(userNum, (i + 2) * sizeof(double));
                    i++;
            }
    }

    return 0;
)

标签: cmemory-management

解决方案


您需要0在打印出数字时重新初始化循环计数器:

for (j = 0; j < (i + 1); j++) {
    printf("%lf\n", userNum[j]);
}

并且您需要增加将userNum数字扫描到的位置:

scanf("%lf", &userNum[i]);

推荐阅读