簡體   English   中英

在兩個表之間分配數字的問題

[英]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);
}

問題是你的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
        }
    }

這應該可以完成工作。 你是如此接近,只需更正你在tabPositivestabNegatives中插入的方式。

   #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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM