2013-07-10 5 views
0

У меня есть код, который читает ввод из файла xdr и показывает результат на оболочке, но я предпочитаю, чтобы программа сохраняла результаты в формате, который я могу читать с помощью geany или nano или других программы. Программа:изменить с печатью на файл c

#include <stdio.h> 
#include <stdlib.h> 
#include <rpc/rpc.h> /* xdr is a sub-library of rpc */ 

#pragma comment(lib, "Ws2_32.lib") // Library for ntohl and htonl 

main() 
{ 
    // Reopens stdin to be the same input stream but in binary mode 

    XDR xdrs; 
    long i, j; 

    FILE* fp; 
    fp = fopen("file.txt", "rb+"); 

    xdrstdio_create(&xdrs, fp, XDR_DECODE); 
    for (j = 0; j < 100; j++) 
    { 
     if (!xdr_long(&xdrs, &i)) { 
      fprintf(stderr, "failed!\n"); 
      exit(1); 
     } 
     printf("%ld ", i); 
    } 

    printf("\n"); 
    exit(0); 
} 

Как вы можете увидеть файл печатает результат, но я предпочитаю, чтобы она сохраняет его в файле, который я могу манипулировать и читать нормально.

Большое спасибо за вашу помощь.

ответ

0

Вы можете сделать так, или вы можете перенаправить вывод в файл с помощью dup2()

#include <stdio.h> 
#include <stdlib.h> 
#include <rpc/rpc.h> /* xdr is a sub-library of rpc */ 

#pragma comment(lib, "Ws2_32.lib") // Library for ntohl and htonl 

main() 

{

// Reopens stdin to be the same input stream but in binary mode 

XDR xdrs; 
long i, j; 

FILE* fp,*fpwrite; 
fp = fopen("file.txt", "rb+"); 
fpwrite = fopen("Myfile","w+"); 
if(fpwrite == NULL){ 
    printf("Failed to open destination file\n"); 
} 

xdrstdio_create(&xdrs, fp, XDR_DECODE); 
for (j = 0; j < 100; j++) 
{ 
    if (!xdr_long(&xdrs, &i)) { 
     fprintf(stderr, "failed!\n"); 
     exit(1); 
    } 
    printf("%ld ", i); 
    fprintf(fpwrite,"%ld ",i); 

} 

printf("\n"); 
fclose(fp); 
fclose(fpwrite); 
exit(0); 

}

+0

, когда я пытаюсь это я получаю следующее сообщение об ошибке : decoder.c: 'In function 'main': decoder.c: 14: 9: ошибка: несовместимые типы при назначении типа 'FILE' из типа 'struct FILE *' decoder.c: 15: 12 : error: недопустимые операнды в двоичный код == (есть 'FILE' и 'void *') decoder.c: 27: 5: ошибка: несовместимый тип для аргумента 1 из 'fprintf' /usr/include/stdio.h: 357: 12: note: expected 'struct FILE * __restrict__', но аргумент имеет тип 'FILE' decoder.c: 33: 1: ошибка: несовместимый тип для аргумента 1 из 'fclose' /usr/include/stdio.h : 238: 12: note: expected 'struct FILE *', но аргумент имеет тип 'FILE'' –

+0

Я РЕШИТЬ проблему @Chinna, я должен объявить файл в одной строке и: я не могу объявить много файлов в те же строки: 'FILE * a1, a2, ... an;' я должен объявить что-то вроде: 'FILE * a1; FILE * a2; ... ' –

+0

@PanichiPattumerosPapaCastoro Извините за это, я уже посмотрел. Но вы можете объявить, как этот файл * fp, * fpwrite – Chinna