c - While 循环使用 realloc,打印时不会更新数组

标签 c memory-management

代码不会产生编译器错误,但如果用户输入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;
)

最佳答案

打印数字时,您需要将循环计数器重新初始化为0:

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

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

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

关于c - While 循环使用 realloc,打印时不会更新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112983/

相关文章:

memory-management - 如何减少Windows Azure共享网站的内存使用?

c++ - 删除和内存管理

c++ - 内存映射文件性能 - 处理大型数据集时的内存管理

c++ - Visual Studio 调试与发布版本 : comparing int and float missmatch

c++ - CUDA 支持 NVIDIA Tegra 4 处理器吗?

c - 我需要一个工具来在单个文本文件或一组文本文件中查找重复或相似的文本 block

从 1 数到 1000 不使用循环 corver edge

vsnprintf 和来自 inttypes 的宏的兼容性

C++ std::vector 的指针删除和段错误

python - 在 Python 中重用名称以节省内存