Ir ao conteúdo
  • Cadastre-se

Transformar um código C++ em C


Ruan Alves

Posts recomendados

Olá, estou com um código aqui em C++ de criptografia de dados, mas preciso que ele esteja em C mas sem mudar o conceito do mesmo.

Tenho um pouco de dificuldade se puderem me ajudar e explicar o que tenho que mudar para que o código passe a ser em C eu agradeceria muito.

Segue o código abaixo:

#include <stdio.h>#include <stdlib.h>#include <string.h>// Configuração da Chave para criptografiachar CHAVE[]="AbCd";int TAM_CHAVE=strlen(CHAVE);//----------------------------------------// Vetor de entrada do texto a ser criptografado tamanho até 128char TEXTO[128];int TAM_TEXTO=128;//----------------------------------------------int TEXTO_CRIPT[1000000];bool Criptografar(){    int CHAVE_int;    for(int i=0; i< strlen(TEXTO) ; i++){        TEXTO_CRIPT[i]=TEXTO[i];    }    for(int aux=0; aux < strlen(TEXTO) ; ){        for(int i=0;i<TAM_CHAVE; i++){            CHAVE_int = CHAVE[i];            TEXTO_CRIPT[aux] = TEXTO_CRIPT[aux] * CHAVE[i];            aux++;        }    }    return true;}bool Descriptografar(){    FILE *arquivo;    int valor;    int pos_chave;    int pos_texto;    arquivo = fopen("c:\\cript\\arquivos_recebidos\\criptografado.txt","r");    if(arquivo==NULL){        return false;    }    pos_chave=0;    pos_texto=0;    while(!feof(arquivo)){        fscanf(arquivo,"%d",&valor);        valor = valor / CHAVE[pos_chave];        TEXTO[pos_texto] = (char)valor;        pos_texto++;        if(pos_chave==TAM_CHAVE-1){            pos_chave=0;        }else{            pos_chave++;        }    }    fclose(arquivo);    return true;}// ----------------------------------------- Menusvoid Recebe_texto(char tipo[]){    char aux[TAM_TEXTO];    char pause;    bool ok;    FILE *arquivo;    char palavra[128];    if(strcmp(tipo,"msg")==0){        printf("\n\nReceber texto para criptografar");        printf("\n\nDigite o texto: ");        gets(aux);        if( strlen(aux) <= TAM_TEXTO){            strcpy(TEXTO,aux);            printf("\n\nTexto recebido com sucesso!");            printf("\n\nCriptografando texto...\n\n");            ok=true;        }else{            printf("\n\nErro!\nTamanho do texto excede o limite de caracteres\n\n");            ok=false;            system("pause");        }    if(ok){        if(Criptografar()){            printf("\n\nTexto criptografado com sucesso!");            arquivo = fopen("c:\\cript\\arquivos_gerados\\criptografado.txt","wt");            if(arquivo==NULL){                printf("\n\nErro ao criar o arquivo...\n\n");            }else{                for(int i=0; i < strlen(TEXTO); i++){                    fprintf(arquivo,"%d ",TEXTO_CRIPT[i]);                }            }            fclose(arquivo);            printf("\n\nPressione enter para abrir a pasta do arquivo gerado!\n");            scanf("%c",&pause);            setbuf(stdin,NULL);            system("explorer c:\\cript\\arquivos_gerados\\");        }else{            printf("\n\nNao foi possivel criptografar o texto!\n\n");        }    }}}void Receber_Arquivo_cript(){    char pause;    printf("\n\nInstrucoes para importar um arquivo criptografado:");    printf("\n\n 1 - Renomeie o arquivo para 'criptografado.txt'");    printf("\n\n 2 - Copie o arquivo para a pasta que sera aberta a seguir");    printf("\n\n 3 - Feche o explorador e retorne a aplicacao");    printf("\n\n\n Pressione Enter para abrir a pasta");    scanf("%c",&pause);    setbuf(stdin,NULL);    system("explorer c:\\cript\\arquivos_recebidos\\");    printf("\n\nPressione enter apos colar o arquivo na pasta...\n");    scanf("%c",&pause);    setbuf(stdin,NULL);    printf("\n\nImportando arquivo...\n\n");    if( Descriptografar() ){        printf("\n Arquivo descriptografado com sucesso!\n");        system("pause");        system("cls");        printf("\n%s\n\n",TEXTO);        system("pause");    }else{        printf("\n Nao foi possivel descriptografar o arquivo!\n\n");        system("pause");    }}void Menu_Criptografar(){    int opcao;    printf("\n\tCriptografia de dados");    printf("\n\n Criptografar texto");    printf("\n\n\n 1 - Digitar texto");    printf("\n\n 2 - Voltar ao menu principal");    printf("\n\n Informe a opcao desejada: ");    scanf("%d",&opcao);    setbuf(stdin,NULL);    switch(opcao){    case 1:        system("cls");        Recebe_texto("msg");        break;    case 2:        break;    default:        printf("Opcao invalida! Tente novamente...");    }}void Menu(){    int opcao;    while(1){        system("cls");        printf("\n\tCriptografia de dados");        printf("\n\n 1 - Criptografar texto");        printf("\n\n 2 - Receber arquivo");        printf("\n\n 3 - Sair");        printf("\n\n Informe a opcao desejada: ");        scanf("%d",&opcao);        setbuf(stdin,NULL);        switch(opcao){        case 1:            system("cls");            Menu_Criptografar();            break;        case 2:            system("cls");            Receber_Arquivo_cript();            break;        case 3:            printf("\nFinalizando...\n\n");            system("pause");            exit(0);            break;        default:            printf("Opcao invalida! Tente novamente...");        }    }}//-----------------------------------------------int main(){    Menu();    return 0;}

Desde já agradeço.

 

Link para o comentário
Compartilhar em outros sites

Olá @Ruan Alves

 

Também estou aprendendo as linguagens C/C++. No seu caso, acho que a forma de alterar um código C++ para C é verificar qual seria o "método" correspondente entre as duas linguagens. O tipo de dado bool, por exemplo, não pode ser implementado em C. Podemos então criar uma função para simular o tipo de dado booleano, como pode ser visto nesse link: https://allanlima.wordpress.com/2006/11/07/simulando-o-tipo-boolean-em-c/

 

Seria importante também analisar as diferenças entre as duas linguagens, como a sintaxe, operadores, conceitos de uso e as limitações de cada uma. Veja => http://studytipsandtricks.blogspot.com.br/2012/05/15-most-important-differences-between-c.html

 

Mais um site => http://www.cprogramming.com/tutorial/c-vs-c++.html

 

Mais um exemplo de alteração: no comentário do código, o compilador apresentará erro ao tentar compilar em C. Para corrigir, deve-se utilizar o comentário com uma barra e dois asteriscos:

/** Configuração da Chave para criptografia **/

Poderia postar todo o código, mas assim eu não estaria lhe ajudando, pois a melhor forma de aprender qualquer linguagem é: praticando, praticando e praticando. :)

 

Espero ter ajudado.
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ainda está dando erro em algumas partes quando compilo o código em C, não sei o que eu faço, segue abaixo o erro:

 

Linha     Coluna     Unidade                                                                     Mensagem
7            1              C:\Users\Usuario\Downloads\APS\APS.c                   [Error] initializer element is not constant
 
                              C:\Users\Usuario\Downloads\APS\APS.c                   In function 'Criptografar':
 
19          5              C:\Users\Usuario\Downloads\APS\APS.c                   [Error] 'for' loop initial declarations are only allowed in C99 mode
 
19          5               C:\Users\Usuario\Downloads\APS\APS.c                  [Note] use option -std=c99 or -std=gnu99 to compile your code
 
23          5               C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
24          9               C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
                               C:\Users\Usuario\Downloads\APS\APS.c                  In function 'Recebe_texto':
 
102        17             C:\Users\Usuario\Downloads\APS\APS.c                  [Error] 'for' loop initial declarations are only allowed in C99 mode
 
28                           C:\Users\Usuario\Downloads\APS\Makefile.win         recipe for target 'APS.o' failed
Link para o comentário
Compartilhar em outros sites

Acabei não reparando os seus loops, mas o padrão C não é compatível com declaração dentro do for.

Então onde estiver, por exemplo:

for(int i = 0; i...
Declare fora,

int i;for(i = 0; i...
Outro problema é a atribuição na variável global,

Você pode alterar

int TAM_CHAVE=strlen(CHAVE);
Para

#define TAM_CHAVE strlen(CHAVE)
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...