Как распределить строки из считываемого файла в два разных массива?

Доброго времени суток всем))

Задачка такая: "Создать текстовый файл. Ввести последовательность символьных строк (максимально возможное количество строк – NBC), каждая из которых содержит двоичный дополнительный код положительного или отрицательного числа. Затем создать два новых массива: в первый переписать коды положительных чисел, а во второй – отрицательные. Напечатайте две таблицы, в которых указать коды чисел и их десятичные значения. Применить собственную функцию, преобразующую символьную строку, в которой записано двоичный дополнительный код числа (первый бит задает знак), в соответствующее десятичное число"

Прошу помощи с пунктом:
1)Создать два новых массива: в первый переписать коды положительных чисел, а во второй – отрицательные.
И по возможности:
2)Напечатать две таблицы, в которых указать коды чисел и их десятичные значения

Заранее благодарю за помощь

Код:

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

#define LEN 10
#define NBC 10
#define NSTR 2

unsigned BinToDec(unsigned Value);
char MinusBin(char* buf);
void copy(char to[], char from[]);

int main() {

    system("chcp 1251");

    char buf[LEN], * pmem;
    char mas1[LEN], mas2[LEN];
    char** strpar, ** parp;
    int nstr, num, max_st = NSTR + 1;
    FILE* ftxt;

    if (!(ftxt = fopen("lab8.txt", "r"))) { // відкриття файла з текстом
        puts("\n Файл з текстом не знайдено...\n");
        return 0;
    }

    /* Зчитування речень з файла у динамiчну пам'ять */
    nstr = 0, num = 0;
    strpar = (char**)malloc(max_st * sizeof(char*)); // для масив вказівників

    while (fgets(buf, LEN, ftxt) != NULL && nstr <= NBC) {
        pmem = (char*)malloc(strlen(buf) + 1); // для речення в ДП
        if (pmem == NULL) { // недостатньо місця
            puts("Немає більше пам\'яті\n");
            break;
        }

        strcpy(pmem, buf); // перенесення рядка в ДП
        strpar[nstr++] = pmem; // запис адреси рядка в масив


        if (buf[0] == '1') {
            copy(mas1, pmem);
            MinusBin(buf);
            num = atoi(buf); //переводимо строку в число
            printf(" ----------\n");
            printf("| Dec: -%d |\n", BinToDec(num + 1));
            printf(" ----------\n");
        }
        else {
            copy(mas2, pmem);
            num = atoi(buf); //переводимо строку в число
            printf(" --------- \n");
            printf("| Dec: %d |\n", BinToDec(num));
            printf(" --------- \n");
        }


        if (nstr == max_st - 1) { // заповнено всі вказівники
            max_st += NSTR; // збільшення розміру масиву
            parp = (char**)realloc(strpar, max_st * sizeof(char*));
            if (parp == NULL) {
                puts("Немає більше пам\'яті\n");
                break;
            }
        else
            strpar = parp; // вказує на нову ділянку ДП
        }
    }
    printf("Масив від'ємних чисел: ");
    printf("%s ", mas1);
    printf("\nМасив додатніх чисел: ");
    printf("%s ", mas2);

    strpar[nstr] = NULL; // кінець адрес – NULL
    fclose(ftxt);

    parp = (char**)realloc(strpar, (nstr + 1) * sizeof(char*)); // зменшуємо
    if (parp != NULL) // розмір масиву вказівників, щоб він
        strpar = parp; // дорівнював кількості введених рядків

    puts("\n\n\tВведені коди:\n");
    for (parp = strpar; *parp != NULL; parp++) {
        printf(" %s", *parp);
    }
    printf("\n");

    /* Звільнення виділеної динамiчної пам'яті */
    parp = strpar;
    while (*parp != NULL) { // цикл по елементах масиву вказівників
        free(*parp++); // витирання рядків в ДП
    }
    free(strpar); // витирання масиву вказівників
    strpar = NULL;

    return 0;
}

void copy(char to[], char from[])
{
    int i = 0;
    while ((to[i] = from[i]) != '\0') i++;
}

unsigned BinToDec(unsigned Value) {
    signed result = 0;
    for (signed i = 1; Value; Value /= 10, i *= 2) {
        result += i * (Value % 10);
    }
    return result;
}

char MinusBin(char* buf) {
    for (int i = 0; i < strlen(buf); i++) {
        if (buf[i] == '0') {
            buf[i] = '1';
        }
        else if (buf[i] == '1') {
            buf[i] = '0';
        }
    }
    return *buf;
}

Ответы (0 шт):