Предоставить целочисленные массивы в качестве ввода из командной строки - PullRequest
1 голос
/ 16 мая 2011

Я пишу программу для доступа к функции алгоритма упаковки бина из библиотеки, с тех пор, как я учился в колледже, я мало что делал с ней, поэтому мой C немного ржавый.Функция, которую я вызываю, требует, чтобы я передал 3 разных целочисленных массива.Я буду звонить из командной строки.Должен ли я использовать argv?Или STDIN?Входные массивы потенциально могут содержать от 50 до 100 элементов каждый.В любом случае, я полагаю, мне придется написать что-то, чтобы разобрать строки и поместить их в массивы, есть ли простой способ сделать это?

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

Для больших массивов я бы предпочел использовать стандартный ввод, так как обычно существует ограничение операционной системы на количество аргументов, которые вы можете иметь.

Вам также понадобится какой-то формат ввода. Допустим, первое число n - это количество элементов в первом массиве, за которыми следуют значения элементов и так далее. Тогда я бы сделал что-то вроде:

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

int main()
{
  // you need to implement read_number yourself
  int n = read_number(stdin);

  // allocate array
  int *array = (int*) malloc(n*sizeof(int));

  // read n numbers into array
  for ( int i=0; i < n; ++i )
    array[i] = read_number(stdin);

  // and so on...
}

Вы получите общее представление. Вы должны либо сами внедрить read_number, либо найти в сети примеры того, как это сделать. Вам нужно будет как-то различать отдельные номера, например, анализируя каждую цифру до следующего пробела. Затем вы можете разделить каждую цифру в stdin пробелами.

Например, вы можете использовать предложенное @ypnos решение scanf ниже.

3 голосов
/ 16 мая 2011

Для этого количества элементов вы должны использовать стандартный ввод.Никто не будет вводить их вручную в любом случае, и ./program < file так же просто, как и получается.

С синтаксическим анализом нет ничего страшного.Просто определите, что ваши входные данные должны включать количество элементов перед всеми числами, образующими массив.Затем вы можете scanf("%d", &elemcount), а затем цикл for elemcount, снова используя scanf.Прелесть этого в том, что scanf будет иметь дело со всеми пробелами, символами новой строки и т. Д., Которые пользователь может поместить между номерами элементов и другими числами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...