#include <stdio.h>
#include <stdlib.h>

#define N 4

int main(int argc, char *argv[])

{
    int valores[4][4], i, j;

    FILE *saidaTexto, *saidaBinaria;
    
    if(argc != 3)
    {
        fprintf(stderr, "Tem de passar dois argumentos!\n");
        return EXIT_FAILURE;
    }
    if((saidaTexto = fopen(argv[1], "w")) == 0)
    {
        fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[1]);
        return EXIT_FAILURE;
    }
    if((saidaBinaria = fopen(argv[2], "wb")) == 0)
    {
        fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[2]);
        return EXIT_FAILURE;
    }

    /* Leitura: */
    for(i = 0; i < N; i++)
        for(j = 0; j < N; j++)
            if(scanf("%d", &valores[i][j]) != 1)
            {
                fprintf(stderr, "Erro lendo elemento [%d][%d]!\n", i, j);
                return EXIT_FAILURE;
            }

    /* Escrita de texto: */
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
            fprintf(saidaTexto, "%3d ", valores[i][j]);
        fputc('\n', saidaTexto);
    }       
    if(ferror(saidaTexto))
    {
        fprintf(stderr, "Erro escrevendo ficheiro de texto!\n");
        return EXIT_FAILURE;
    }

    /* Escrita binaria: */
    if(fwrite(valores, sizeof(int), N*N, saidaBinaria) != N*N)
    {
        fprintf(stderr, "Erro escrevendo ficheiro binario!\n");
        return EXIT_FAILURE;
    }

    fclose(saidaTexto);
    fclose(saidaBinaria);

    return EXIT_SUCCESS;
}