Bloques de código que redirigen la salida de entrada
redirect input (6)
Soy nuevo en los bloques de código, y parece que no puedo hacer que funcione con argumentos de línea de comando de <input> output. ¿Alguien sabe cómo?
Actualmente puedo leer un archivo pasado de argv [1] pero el programa no lee automáticamente la entrada del archivo dado ni lo hace a la salida del archivo.
Soy consciente de que está en los argumentos del programa establecido, mi línea de argumentos es: list.txt <input> output
Después de algunas investigaciones, vi a un chico haciéndolo así: <./input> ./output, parece que ejecutar un programa para dar la entrada y salida, de todos modos, también lo he intentado sin éxito. ¿Necesito usar manejadores de archivos para interactuar con él? No tiene sentido, getchar simple () debería leer del archivo de entrada que pasa.
¿Que me estoy perdiendo aqui?
Gracias por adelantado
Creo que es el problema de cb_console_runner.exe
que inicia su programa en IDE . ConsoleRunner
no puede interpretar el símbolo de redirección. Entonces, agrego un código al código original de codeblocks 13.12. Copie el archivo vinculado a [carpeta cb]. (No olvide hacer una copia de seguridad del original).
binario: http://limity.tistory.com/attachment/[email protected]
código fuente: http://limity.tistory.com/attachment/[email protected]
He encontrado la manera de hacerlo en CB 13.12
Tools -> Configure Tools -> Add:
Name: whatever
Executable: C:/Windows/System32/cmd.exe
Parameters: /C ${TARGET_OUTPUT_BASENAME} exampleArg1 <inputFileRedirect.txt
Working Directory: ${TARGET_OUTPUT_DIR}
Básicamente inicia la consola de Windows y le pasa Parámetros . También puede asignar atajos de teclado a estas herramientas. La única desventaja que puedo ver es que las herramientas no son específicas de un proyecto.
He estado trabajando con Code :: Blocks desde hace un tiempo y hace poco noté lo mismo al menos con Code :: Blocks 12.11 en Windows. Las redirecciones > y < no funcionan en el Proyecto -> Establecer argumentos de programas ...
Una solución hackosa es hacer la ejecución en el paso posterior a la construcción.
Haga clic derecho en el project name -> Build options... -> Pre/post build steps -> Post-build steps:
cmd /C cd /D "bin/$(TARGET_NAME)/" & YourApplicationNameHere.exe >output.txt 2>errors.txt
Y marque la casilla de verificación Ejecutar siempre, incluso si el objetivo está actualizado. Ahora presiona Ctrl + F9 y el programa se ejecuta como el último paso del proceso de construcción.
Intenté casi todas las opciones y no pude hacer que funcione: P Después de estar harto de todo eso, básicamente uso el procesamiento de archivos para hacer mi trabajo (uf)
esto es lo que hice en el código
En el alcance global escribí:
#define DEBUG
#ifdef DEBUG
#include<fstream>
ifstream Inputfile;
ofstream Outputfile;
#define cin Inputfile
#define cout Outputfile
#endif //#ifdef DEBUG
Y en general, escribí lo siguiente antes de hacer cualquier otra cosa:
int main(){
#ifdef DEBUG
Inputfile.open("Input.txt");
Outputfile.open("Output.txt");;
#endif // #ifdef DEBUG
Finalmente, justo antes de cerrar el proceso principal, hizo esto:
#ifdef DEBUG
Inputfile.close();
Outputfile.close();
#endif // #ifdef DEBUG
Después de esto agregaron dos archivos
Input.txt
&
salida.txt
al proyecto
Esto funcionó como se esperaba
Pude obtener una entrada redireccionada a mi programa c configurando los argumentos del programa en el menú del proyecto.
Vaya a Top Menu>Project>Set programs'' arguments
y ponga </absolute/path/to/yourinputfile
notice <
en el inicio, engaña los bloques de código en el archivo de redirección en lugar de pasar el argumento.
Sé que este es un tema antiguo, pero ninguna de las soluciones es lo suficientemente buena. Para Windows, probablemente vaya con la siguiente definición de macro (ya que puede necesitarla también para la impresión de depuración o similar) en el alcance global
#include <cstdio>
#ifdef DEBUG
#define D(X) X
#else
#define D(X)
#endif
Luego, como la primera o segunda línea (si necesita std :: ios :: sync_with_stdio (false);) en main use como
int main() {
D(freopen("input.txt","r",stdin);)
D(freopen("ouput.txt","w",stdout);)
...
Y defina en Code :: Blocks en Projects> Build Options ...> (Debug, Configuraciones del compilador, #defines)
DEPURAR
Esperando que "input.txt" sea el archivo de entrada de texto en la carpeta donde se encuentran el resto de los archivos .c o .cpp, y "output.txt" será el archivo de salida generado en la misma carpeta (o ambos pueden ser agregados) al proyecto como tales archivos para facilitar la edición / visualización).
Esta solución funcionará con cin / cout y scanf / printf.