Ir para conteúdo
Fórum Script Brasil
  • 0

Passar variavel FILE por referencia


Farofa Pereira

Pergunta

Olá pessoal, estou fazendo um trabalho na faculdade, que precisa converter um programa em pascal para c.

Meu programa tem dois arquivos em c... o Programa propriamente dito... e um arquivo .h com as funções que serã usadas...

Estou tendo problemas na hora de passar os 3 arquivos (programa em pascal, dicionario de conversao, e programa convertido) como referencia, para as funções do segundo arquivo...

Se alguém puder me dar uma mão, eu agradeço.

Estou usando o W7 Ultimate, compilador de c DEV C++ 4.9.9.2

Segue abaixo os dois codigos.

conversorPascalC.c

/*    
    ESSE PROGRAMA CONVERTE UM ARQUIVO EM PASCAL COM UM SWITCH E UMA ESTRUTURA DO TIPO WHILE PARA 
        UM ARQUIVO EM C
    
      NÃO APAGAR O ARQUIVO GCC.EXE DA PASTA DO PROJETO. COMO NO FINAL ELE COMPILA E EXECUTA O
          O PROGRAMA CONVERTIDO ELE PRECISA DE COMPILADOR DE C. ESSE COMPILADOR FOI COPIADO DA PASTA
          C:\Dev-Cpp\bin DO COMPILADOR DEV-C++ VERSÃO 4.9.9.2. FIZ DIVERSOS TESTES PARA VER SE ELE
          DARIA CONTA DE COMPILAR VARIOS ARQUIVOS DIFERENTES NA LIGUAGEM C, RODANDO ELE POR LINHA DE
          COMANDO, NÃO TIVE NENHUM ERRO OU PROBLEMA EM RELACAO A ISSO, VARIOS CODIGOS EM C FORAM 
          COMPILADOS E EXECUTADOS EXATAMENTE COMO SE TIVESSEM SIDO COMPILADOS POR DENTRO DO DEV
*/

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "./conversor.h"

//MAIN
void main()
{
   FILE *base,
           *convertido,
        *dicionarioConversao;
          
    //APAGA POSSIVEIS ARQUIVOS CONVERTIDOS ANTIGOS
    apagaArquivosAntigos();
             
    //ABERTURA DE ARQUIVOS
    abreArquivos(&base, &convertido, &dicionarioConversao);
    
    //POSICIONA TODOS OS ARQUIVOS NO COMEÇO
    posicionaComeco(&base, &convertido, &dicionarioConversao);    
    
    //CONVERTE PROGRAMA PASCAL PARA C
    converte(&base, &convertido, &dicionarioConversao);
            
    //FECHA OS ARQUIVOS
    fechaArquivos(&base, &convertido, &dicionarioConversao); 
    
    //COMPILA E EXECUTA O ARQUIVO CONVERTIDO EM C
    compilaExecuta();            
}
conversor.h
/*==============================================================================================
APAGA ARQUIVOS CONVERTIDOS ANTIGOS
==============================================================================================*/
void apagaArquivosAntigos()
{
    system("cls");
    printf("Apagando arquivos convertidos antigos!");
    
    /*NÃO FOI USADO O remove() PARA REMOVER ARQUIVOS, PORQUE VAI SER MAIS DE UM ARQUIVO COM  O 
        COM O NOME DE CONVERTIDO, MAS ELE VAI TER NO MINIMO DOIS ARQUIVOS DIFERENTES: 
        CONVERTIDO.C E CONVERTIDO.EXE. POR ISSO EU RESOLVI APAGAR OS ARQUIVOS COM A LINHA DE 
        COMANDO DO DOS, COM OS PARAMETROS DEL CONVERTIDO.*, QUE IRA APAGAR TODOS OS ARQUIVOS
        CHAMADOS DE CONVERTIDO, MAS DE QUALQUER EXTENSÃO*/    
    system("del convertido.*");
    
    printf("\nArquivos convertidos antigos foram apagados!"
           "\n\nPressione qualquer tecla para iniciar o programa...");
    system("pause>>NULL");
}
/*==============================================================================================
ABRE ARQUIVOS
==============================================================================================*/
void abreArquivos(FILE *base, FILE *convertido, FILE *dicionarioConversao)
{
    system("cls");
    
    //ARQUIVO BASE
    if ((base = fopen("./base.pas", "rt")==NULL))
    {
        printf("não foi possivel abrir o programa base\n");
        system("pause>>NULL");
        exit(1);    
    }
    else
        printf("Arquivo base aberto com sucesso!\n");
    
    //DICIONARIO DE CONVERSAO
    if ((dicionarioConversao = fopen("./dicionarioConversao.txt", "rt")==NULL))
    {
        printf("não foi possivel abrir o dicionarioConversao\n");
        system("pause>>NULL");
        exit(1);    
    }
    else
        printf("Arquivo dicionarioConversao aberto com sucesso!\n");
    
    //ARQUIVO CONVERTIDO
    if ((convertido = fopen("./convertido.c","wt")==NULL))
    {
        printf("Não foi possivel criar o programa convertido\n");
        system("pause>>NULL");
        exit(1);    
    }
    else
        printf("Arquivo convertido criado com sucesso!\n");
        
    
    printf("\nPressione qualquer tecla para iniciar a conversao...");    
    system("pause>>NULL");
}
/*==============================================================================================
//POSICIONA TODOS OS ARQUIVOS NO COMEÇO
==============================================================================================*/
void posicionaComeco(FILE *base, FILE *convertido, FILE *dicionarioConversao)
{
    system("cls");
    
    rewind(base);
    rewind(convertido);
    rewind(dicionarioConversao);
    
    printf("\n\nTodos os arquivos foram voltados ao inicio!"
             "\nPressione qualquer tecla para iniciar conversão!");
    
    system("pause>>NULL");    
}
/*==============================================================================================
//FECHA ARQUIVOS
==============================================================================================*/
void fechaArquivos(FILE *base, FILE *convertido, FILE *dicionarioConversao)
{
    system("cls");
    Sleep(1000);
    
    //ARQUIVO BASE
    fclose(base);
    printf("Arquivo Base fechado com sucesso!\n");    
    
    //DICIONARIO DE CONVERSAO
    fclose(dicionarioConversao);
    printf("Arquivo dicionarioConversao fechado com sucesso!\n");
    
    //ARQUIVO CONVERTIDO
    fclose(convertido);
    printf("Arquivo convertido fechado com sucesso!\n");
    
    printf("\n\nPressione qualquer tecla para iniciar compilação do programa convertido!");
    system("pause>>NULL");
}
/*==============================================================================================
//CONVERTE
==============================================================================================*/
void converte(FILE *base, FILE *convertido, FILE *dicionarioConversao)
{
    //CONVERTE    
        
    printf("\nO programa foi convertido com sucesso!");
    
    printf("\n\nPressione qualquer tecla para iniciar a compilacao do programa em C...");
    system("Pause>>NULL");
}
/*==============================================================================================
//COMPILA E EXECUTA O PROGRAMA CONVERTIDO EM C
==============================================================================================*/
void compilaExecuta()
{
    FILE *teste;
    
    system("cls");
   system("pause>>NULL");
   
   printf("Compilando o arquivo convertido!");
   system("start ./gcc.exe ./convertido -o ./convertido");
   
   if ((teste = fopen("./convertido.exe" , "rb")) != NULL) //EXISTE O ARQUIVO CONVERTIDO.EXE
   {
        printf("\n\nPressione qualquer tecla para rodar o arquivo convertido");
       system("pause>>NULL");
       system("start ./convertido.exe");
    }
    else //NÃO EXISTE O ARQUIVO CONVERTIDO.EXE
        printf("A Compilação deu erro verifique o arquivo convertido!");
    
    printf("\n\nPressione qualquer tecla para finalizar o programa...");
    system("pause>>NULL");
}

Obrigado

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...