[英]Problem with distributing numbers between two tables
我想將我的負數與兩個單獨數組中的正數分開。 問題,當我這樣做並打印結果時,負數轉換為 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);
}
問題是你的tabPositives
和tabNegatives
數組沒有你的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
}
}
這應該可以完成工作。 你是如此接近,只需更正你在tabPositives
和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));
int iPos = 0;
int iNeg = 0;
for (int i = 0; i < numberData; i++){
if (tabData[i] >= 0){
tabPositives[iPos++] = tabData[i];
}else {
tabNegatives[iNeg++] = tabData[i];
}
}
printf("INPUT\n");
for (int i = 0; i < numberData; i++){
printf("%d\t", tabData[i]);
}
printf("\n");
printf("OUTPUT\n");
for (int i = 0; i < numberPositives; i++){
printf("%d\t", tabPositives[i]);
}
printf("\n");
for (int i = 0; i < numberNegatives; i++){
printf("%d\t", tabNegatives[i]);
}
printf("\n");
free(tabData);
free(tabNegatives);
free(tabPositives);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.