leí este tema, pero su problema puede ser diferente de la mía Writing to both stdout & a filecómo imprimir tanto en la salida estándar y el archivo en C
Quiero escribir una función, esa función es necesario imprimir a la vez la salida estándar y un archivo . Mi programa C recibe la entrada del usuario mediante scanf.
tengo la intención de escribir una función como printf pero no se sabe muy bien cómo:
yo probamos este, pero sólo puede trabajar con una cuerda "puro", no se puede convertir% d,% *. Si (mi función de impresión sólo se necesitan dos conversiones)
void dupPrint(FILE *fp,char *string)
{
printf("%s",string);
fprintf(fp,"%s",string);
return;
}
probé dup2 y freopen pero no funcionó para mí.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
int i;
int file = open("input3.txt", O_APPEND | O_WRONLY);
if(file < 0) return 1;
if(dup2(file,1) < 0) return 1;
printf("Redirect to file!\n");
printf("enter i : ");
scanf("%d",&i);
return 0;
}
Este tutorial de dup2() solo imprime en el archivo.
También probé T, pero puede que no funcione porque tengo que obtener la opinión del usuario (si funciona, no es "justo" porque la T no está en mi programa).
pienso poner en práctica una voluntad resuelto el problema printf similar pero no saben cómo convertir. * Si (imprimir doble con facilidad de entrar en la precisión)
#include <stdio.h>
#include <stdarg.h>
void dupPrint(FILE *fp,char *fmt, ...)
{
va_list ap;
char *p, *sval;
int ival;
double dval;
va_start (ap, fmt); //make ap point to 1st unnamed arg
for(p = fmt; *p; p++)
{
if (*p != '%') {
putchar(*p);
continue;
}
switch (*++p) {
case 'd':
ival = va_arg(ap, int);
printf("%d", ival);
break;
case '.*lf' //?????
}
}
}
¿Puede alguien sugerir una solución para ¿mi problema?
fprintf puede imprimir a la salida estándar, así como a los archivos –
Usted _could_ abrir una tubería que llama 'tee' e imprimir datos a ese gestor de archivo, pero esto puede no ser lo suficientemente confiable (si esto necesita ejecutarse en sistemas sin 'tee'). –
"El programa My C recibe la entrada del usuario mediante scanf" - se encuentra con un _world_ of pain :-) – paxdiablo