c - 数组值在 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 打印的数组值)
提前感谢您的帮助!
解决方案
您正在数组范围之外进行写入和读取。您正在使用i
交替索引numeros
和 then operadores
,但这意味着i
它始终是任一数组的两倍大。您需要除以i
2 才能将其转换为可用索引。
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]);
}
}
推荐阅读
- html - 重新定位图像的媒体查询
- excel - 如何将 Excel 工作簿转换为文本(制表符分隔)?
- r - R语言,正则表达式返回一个字符匹配四个字符串
- java - Feign 客户端总是在 Spring boot/Crawler4j 应用程序中抛出空指针异常
- python - 是否可以使用向量方法来移动存储在 numpy ndarray 中的图像以进行数据增强?
- r - R lapply 有几个动态参数
- javascript - 如何以相同大小显示图像 - 填充空间?
- javascript - 获取导航栏中的每一行文本并添加为 id
- pyopenssl - 子类 PyOpenSSL X509 并使用现有证书对其进行初始化
- python - 使用 Python Dask 读取大型 JSON 文件会引发分隔符错误