Я хочу заполнить динамический массив целых чисел, используя аргументы командной строки - PullRequest
0 голосов
/ 20 июня 2019

Я хочу заполнить динамический массив числами из командной строки. Если есть 2 аргумента командной строки, он откроет файл и прочитает данные, но если есть только один, он примет пользовательский ввод. Этот код работает, когда argc == 1, но не работает, если есть два аргумента. Я не могу понять ошибку, но был бы очень признателен за помощь. Спасибо.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>  
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include <errno.h>


int main(int argc, char* argv[]) {

    FILE* input = NULL;

    double num;

    //pointer to double
    //will expand if necessary
    double* numArray = NULL; 

    size_t arraySize = 0;
    size_t arrayCount = 0;

    if (argc == 1) {
        input = stdin;
        puts("Enter white-space separated real numbers. Terminate input with ^Z");
    }

    if (argc == 2) {
        input = fopen(argv[1], "rb");
         if(input = NULL) {
            printf("Cannot open file: <%s>", argv[1]);
            perror(" ");
            exit(1);
        }
    }

    while (fscanf_s(input, "%lf", &num) == 1) {
        if (arrayCount >= arraySize) {
            size_t newSize = arraySize ? arraySize * 2 : 32;
            double *newArray = realloc(numArray, newSize * sizeof(double));
            if (newArray == NULL) {
                printf("Out of memory for %zu elements\n", newSize);
                perror(" ");
                exit(1);
            }
            numArray = newArray;
            arraySize = newSize;
        }
        /*if (res != EOF ) {
            printf("Invalid input for element: %zu", arrayCount);
            perror(" ");
            exit(1);
        }*/
        numArray[arrayCount++] = num;
    }

    //print out elements
    for (size_t i = 0; i < arrayCount; ++i)
        printf("%.2lf, ", numArray[i]);

    free(numArray);
    fclose(input);


}
...