gpt4 book ai didi

c - 在两个表之间分配数字的问题

转载 作者:行者123 更新时间:2023-12-01 01:22:41 25 4
gpt4 key购买 nike

我想将负数与正数分开在两个单独的数组中。问题是,当我这样做并打印结果时,负数会变成 0。

输出示例:

INPUT
423-5
OUTPUT
423
0

我的 tabData 数组中的数字是正确的,但我的 tabNegatives 数组中的数字不正确。

这是我的代码:

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

int main (int argc, char **argv) {
int numberData = 0;
int numberPositives = 0;
int numberNegatives = 0;
int number = 0;
int *tabData = NULL;
int *tabPositives = NULL;
int *tabNegatives = NULL;

printf("Enter size : ");
scanf("%d", &numberData);

tabData = malloc(numberData * sizeof(int));
for (int i = 0; i < numberData; i++) {
printf("Enter number: ");
scanf("%d", &number);
tabData[i] = number;
if (number >= 0) {
numberPositives++;
} else {
numberNegatives++;
}
}

//allocation
tabPositives = malloc(numberPositives * sizeof(int));
tabNegatives = malloc(numberNegatives * sizeof(int));

for (int i = 0; i < numberData; i++) {
if (tabData[i] >= 0) {
tabPositives[i] = tabData[i];
} else {
tabNegatives[i] = tabData[i];
}
}

printf("INPUT\n");
for (int i = 0; i < numberData; i++) {
printf("%d", tabData[i]);
}
printf("\n");
printf("OUTPUT\n");
for (int i = 0; i < numberPositives; i++) {
printf("%d", tabPositives[i]);
}
printf("\n");
for (int i = 0; i < numberNegatives; i++) {
printf("%d", tabNegatives[i]);
}
printf("\n");

free(tabData);
free(tabNegatives);
free(tabPositives);
}

最佳答案

问题是您的 tabPositivestabNegatives 数组没有 tabData 数组大 - 因此,当您将值分配给[i] 这些数组的元素,您将(在某些时候)超出范围。

您应该为这两个数组中的每一个保留单独的索引,如下所示:

    int iPos = 0, iNeg = 0; // Current indexes for each pos/neg array
for (int i = 0; i < numberData; i++){
if (tabData[i] >= 0){
tabPositives[iPos++] = tabData[i]; // Use current "pos" index then increment
}else {
tabNegatives[iNeg++] = tabData[i]; // Use current "neg" index then increment
}
}

关于c - 在两个表之间分配数字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59530628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com