Pregunta

Permítanme comenzar diciendo esto se asocia con una asignación de la preparación. Sin embargo, esto es una parte muy pequeña y relativamente insignificante de la asignación.

El programa C recibe la entrada a través de argumentos de línea de comando, pero que tiene que ser en la forma:

$ ./program < input

¿Cómo, tengo que hacer para recibir esa entrada como una cadena? Cada vez que intento imprimir el argumento de la tercera argv que reciben este mensaje:

  

Entrada:. No existe el fichero o directorio

¿Fue útil?

Solución

sed.

Si tuviera que adivinar yo creo que la:

input: No such file or directory.

viene de la cáscara, ya que no es capaz de abrir el archivo especificado:. "Entrada"

Por otro lado, si realmente desea que el < input como argumentos a su programa, puede escapar o citarlos por lo que la cáscara no interpretarlos. (Escapar deja como ejercicio para el lector: -)).

Otros consejos

La sintaxis ./program < input es una sintaxis especial cáscara diciendo "vuelve a dirigir todo en el archivo denominado input a la entrada estándar del programa".

Para leer la entrada, su programa sólo tiene que utilizar la lectura de entrada de las funciones estándar, fgets línea o scanf.

En los sistemas * nix, no habrá ser un tercer elemento de argv. Si se ejecuta este comando en casi cualquier cáscara de Unix, que será similar a hacer esto:

cat input | ./program

Así que su ./program tiene sólo un elemento en argv, pero es stdin es la input archivo, de modo que leer el archivo que acaba de leer de stdin. Tenga en cuenta que esta es una forma perfectamente válida para diseñar su programa. Muchos programas Unix leen desde la entrada estándar si no se dan los archivos, por lo que es posible que la tubería de entrada de otros programas (o en este caso, a partir de archivos).

Lo que viene después de la < no es un argumento de línea de comandos. El contenido del archivo se canalizan en su programa por la cáscara.

Todo lo que necesita hacer es leer de la entrada estándar y obtendrá el contenido del archivo.

Es necesario para escapar de la '<', de lo contrario shell analizarlo, y el programa no lo recibirá en la línea de comandos.

Si está utilizando bash, a continuación:

./program '<' input

o

./program \< input

Otros proyectiles podrían hacerlo de otra manera (por ejemplo, por defecto de Windows', cmd.exe, utiliza ^ como carácter de escape, no \).

Esto es una cosa shell Unix. La forma someprogram < somefile dice someprogram que se ejecute mediante somefile como su entrada. Si quieres hacer algo diferente que implica el símbolo <, tendrá que citar a él.

El < significa que el programa va a leer es la entrada estándar (stdin) desde el archivo con el nombre (de entrada). Así que acaba de leer de la entrada estándar (usando fgets, fread, etc).

dejar fuera de la '<'. ¿Quieres argumentos de línea de comandos hacen esto:

  

$ ./program -Dflag siete = ixnay FromDinger

En su aplicación, intente lo siguiente:

int main( int argc, char **argv )
{
   int i;
   for( i = 0 ; i < argc ; ++i )
      printf( "Arg %d = %s\n", i, argv[i] );
   return 0;
}

Se dará cuenta de que el primer argumento es el nombre del ejecutable (con índice 0), y el segundo argumento (en el índice 1) será "-Dflag"

En realidad, esta es una técnica muy común que se utiliza en los torneos de programación. Los datos de su programa necesita se almacena en un archivo, digamos datos.txt, y luego de nuevo a su aplicación con el "<" en la cáscara, así: ./ programa

Por lo tanto, en el código fuente, lo que tiene que hacer es algo como esto:

#include <iostream>
#include <string>

using namespace std;

int main(void)
{
    string tmp;
    string full_content;

    while (cin >> tmp)
        full_content += " "+tmp;

    cout << full_content << endl;
}

.. y obtendrá todos los datos del archivo en una cadena (y separados por espacios).

Esa es una manera de hacerlo, espero que ayude. [] 'S

Se puede conseguir mediante la lectura de la entrada estándar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top