c - 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;
)
解决方案
您需要0
在打印出数字时重新初始化循环计数器:
for (j = 0; j < (i + 1); j++) {
printf("%lf\n", userNum[j]);
}
并且您需要增加将userNum
数字扫描到的位置:
scanf("%lf", &userNum[i]);
推荐阅读
- mysql - 使用 MySQL 创建数据库并使用 SQLAlchemy 和 Pandas 填充它
- babylonjs - 无法使用 CreateGroundFromHeightMap 函数生成网格。在警报弹出窗口中获取地面对象报告它有 0 个细分和 0 个顶点
- apache-cayenne - 在将 cayenne 生成的类转换为其他层时处理 ObjectId 的最佳实践
- asp.net - 访问 DataReader 值时出错(在 SqlDataReader 中访问连接表结果)
- java - 带有 PHP 客户端的 Java Socket 服务器
- angular - Angular 11 无法绑定到 ngModel
- javascript - 从 express 调用 python 脚本
- javascript - channel.send 不是函数 discord.js
- asp.net-core - 不知道是否可以在 Hot Chocolate for ASP.NET Core 中使用多个模式
- r - 在ggplot中向geom_histogram添加文本的正确方法是什么?