c – salida a archivo

Si tuviera una matriz de enteros, quería enviar a un archivo de texto.

void output() { for (i=0; i<10; i++) printf("%d ", values[i]); } 

¿Cómo puedo guardar la salida () en un archivo de texto usando el método a continuación?

 void writeToFile() { file = fopen("file.txt","a+"); // apend file or create a file if it does not exist fprintf(file,"%d", *missing parameter*); // write fclose(file); // close file printf("File created. Located in the project folder.\n", ""); } 

Como alternativa a la creación de dos funciones (según la respuesta de AareP ), puede agregar un parámetro de destino a la función output() :

 void foutput(FILE *dest, int values[]) { int i; for (i=0; i<10; i++) fprintf(dest, "%d ", values[i]); } 

A continuación, puede volver a implementar la output() original output() como un envoltorio simple:

 void output(int values[]) { foutput(stdout, values); } 

Esto puede no parecer demasiado útil en este caso, pero lo he puesto aquí porque este patrón general puede ser útil cuando la lógica de la función de salida es más complicada. En general, es mejor mantenerlo en un lugar que replicarlo a través de múltiples funciones (significa que solo tiene que corregir errores en un lugar, por una cosa).

Agregando a lo que otros han dicho:

Siempre debe comprobar si hay errores después de fopen , que en caso de error devuelve NULL .

 FILE *file = fopen("file.txt","a+"); if(!file) { fprintf(stderr,"error opening file...exiting\n"); exit(1); } 

Solo crea dos funciones:

 void output() { for (i=0; i<10; i++) printf("%d ", values[i]); } void output(FILE* file) { for (i=0; i<10; i++) fprintf(file, "%d ", values[i]); } 

Si desea reutilizar su función de salida, puede hacer algo como esto. Con la función a_output podrá imprimir los resultados tanto en la consola como en cualquier otro flujo de salida.

 #include  #include  void a_output(FILE *fs, int *array, unsigned int array_s); void a_output(FILE *fs, int *array, unsigned int array_s){ int i; assert(fs != NULL); assert(array != NULL); for(i = 0; i < array_s ; i++){ fprintf(fs, "%d ", array[i]); } } int main(int argc, char **argv) { int array[5] = {1, 2, 3, 4, 5 }; FILE *out; if((out = fopen("output.txt", "w")) == NULL){ return -1; } /* Will "print" results in a file */ a_output(out, array, 5); /* Will "print" results in console */ a_output(stdout, array, 5); fclose(out); return 0; }