Proporcione matrices de enteros como entrada desde la línea de comando

Estoy escribiendo un programa para acceder a una función de algoritmo de empaquetado de contenedores desde una biblioteca, no he hecho mucho con él desde la universidad, así que mi C está un poco oxidada. La función que estoy llamando requiere que pase 3 matrices de enteros diferentes. Llamaré a esto desde la línea de comando. ¿Debería usar argv? ¿O STDIN? Las matrices de entrada podrían tener entre 50 y 100 elementos cada una. De cualquier manera, supongo que tendré que escribir algo para analizar las cadenas y colocarlas en matrices, ¿hay alguna manera fácil de hacerlo?

preguntado el 16 de mayo de 11 a las 18:05

2 Respuestas

Para arreglos grandes, prefiero usar la entrada estándar, ya que generalmente hay límites en el sistema operativo para la cantidad de argumentos que puede tener.

También necesitará algún tipo de formato de entrada. Digamos el primer número n es el número de elementos de la primera matriz, seguido de los valores de los elementos, etc. Entonces haría algo como:

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

Obtienes la idea general. O tendrías que implementar read_number usted mismo o busque ejemplos en la red sobre cómo hacerlo. Necesitará discernir números individuales de alguna manera, por ejemplo, analizando cada dígito hasta el siguiente carácter de espacio en blanco. Luego, puede separar cada dígito en stdin por caracteres de espacio.

Por ejemplo, puede utilizar la solución scanf sugerida por @ypnos a continuación.

contestado el 17 de mayo de 11 a las 00:05

Creo que es la longitud de los argumentos en contraposición al número de argumentos lo que es limitado. - GWW

Para esa cantidad de elementos debes usar stdin. Nadie los escribirá a mano de todos modos y ./program < file es tan fácil como parece.

El análisis no es un gran problema con scanf. Simplemente defina que su entrada debe incluir el número de elementos antes de todos los números que forman una matriz. Entonces tú puedes scanf("%d", &elemcount), y luego for-loop over elemcount, nuevamente usando scanf. La belleza de esto es que scanf se ocupará de todos los espacios en blanco, líneas nuevas, etc. que el usuario puede poner entre los números de elementos y los demás números.

contestado el 16 de mayo de 11 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.