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

Ajuda com debug de programa


Gaba_

Pergunta

Olá, estou tendo um problema para ler e escrever no mesmo arquivo.

O que eu quero fazer é ler um caracter do arquivo, somar um valor a esse caracter e escrever o resultado como um caracter na mesma posição do original. (ex: 'A'= 65 + 3 = 68 = 'E')

Fazer isso para todo o arquivo.

Meu código:

#include <iostream>
#include <fstream>
using namespace std;

#include <stdlib.h>        // usando exit() e atoi()

int main(int argc, char* argv[])
{   
    int p;
    char c; // caractere do arquivo
    int cripto; // caractere encriptado do arquivo
    int key = atoi (argv[2]); // senha
    
    if (argc != 3) // verifica número de parâmetros
    {
        cout << "\nErro, use 2 parametros como: c:\\meuarquivo.xxx senha" << endl;
        exit(1);
    }
    
    else if (key  < 0 || key > 255) // verifica a senha
    {

        cout << "\nErro, a senha deve ser um numero de 0 a 255" << endl;
        exit(1);
    }
    
    fstream inout (argv[1], ios::binary | ios::out | ios::in); // abre o arquivo
    
    if (!inout.is_open()) // verifica erro ao abrir arquivo
    {
        cout << "\nErro ao abrir arquivo" << endl;      
        exit(1);
    }

    while (inout.good())
    {
          inout.get(c); // lê caracter
        cripto = (int)c + key; // aplica a senha
        inout.seekp( -1, ios_base::cur); // volta uma posição
        inout.put((char)cripto); // escreve caracter no arquivo
    }
    
    inout.close(); // fecha o arquivo
    cout << "\nCriptografado com sucesso!" << endl;
    return 0;
}

Já quebrei muito a cabeça, não consigo ver onde errei.

Obrigado a todos pela ajuda logo de adiantado!

Gabriel

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Saudações,

Relembrando os bons e velhos tempos de fórum....

Segue minha contribuição.

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

int main(int argc, char* argv[])
{
    int p;
    char c; // caractere do arquivo
    int cripto; // caractere encriptado do arquivo
    int key = atoi (argv[2]); // senha

    if (argc != 3) // verifica número de parâmetros
    {
        cout << "\nErro, use 2 parametros como: c:\\meuarquivo.xxx senha" << endl;
        exit(1);
    }

    else if (key  < 0 || key > 255) // verifica a senha
    {

        cout << "\nErro, a senha deve ser um numero de 0 a 255" << endl;
        exit(1);
    }

    fstream inout (argv[1], ios::in | ios::out | ios::binary); // abre o arquivo

    if (!inout.is_open()) // verifica erro ao abrir arquivo
    {
        cout << "\nErro ao abrir arquivo" << endl;
        exit(1);
    }

    while (inout.good())
    {
        inout.get(c); // lê caracter
        cripto = (int)c + key; // aplica a senha
        inout.seekp( -1, ios_base::cur); // volta uma posição
        inout.put((char)cripto); // escreve caracter no arquivo
        inout.seekp( +1, ios_base::cur); // retorna a posição de leitura
    }

    inout.close(); // fecha o arquivo
    cout << "\nCriptografado com sucesso!" << endl;
    return 0;
}

Abraços,

William Rodrigues.

Link para o comentário
Compartilhar em outros sites

  • 0
Saudações,

Relembrando os bons e velhos tempos de fórum....

Segue minha contribuição.

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

int main(int argc, char* argv[])
{
    int p;
    char c; // caractere do arquivo
    int cripto; // caractere encriptado do arquivo
    int key = atoi (argv[2]); // senha

    if (argc != 3) // verifica número de parâmetros
    {
        cout << "\nErro, use 2 parametros como: c:\\meuarquivo.xxx senha" << endl;
        exit(1);
    }

    else if (key  < 0 || key > 255) // verifica a senha
    {

        cout << "\nErro, a senha deve ser um numero de 0 a 255" << endl;
        exit(1);
    }

    fstream inout (argv[1], ios::in | ios::out | ios::binary); // abre o arquivo

    if (!inout.is_open()) // verifica erro ao abrir arquivo
    {
        cout << "\nErro ao abrir arquivo" << endl;
        exit(1);
    }

    while (inout.good())
    {
        inout.get(c); // lê caracter
        cripto = (int)c + key; // aplica a senha
        inout.seekp( -1, ios_base::cur); // volta uma posição
        inout.put((char)cripto); // escreve caracter no arquivo
        inout.seekp( +1, ios_base::cur); // retorna a posição de leitura
    }

    inout.close(); // fecha o arquivo
    cout << "\nCriptografado com sucesso!" << endl;
    return 0;
}

Abraços,

William Rodrigues.

Muito obrigado amigo, mas infelizmente não funcionou, o arquivo ficou uma letra codificada e outra não assim sucessivamente. Porque o comando inout.put© já deve andar uma posição.

Está complicado, ninguém acha esse bug.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Saudações,

Aqui funcionou normalmente. Fiz um arquivo texto simples (com a seguinte informação: "ABC") e a criptografia foi realizada normalmente.

Utilizei VS 2010.

Abraços,

William Rodrigues.

Estranho, aqui retornou DBF. Converteu o primeiro e o segundo caracteres somente :/

Mas, muito obrigado, vou tentar em outro compilador depois. Tentei com o DevC++

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

Conseguir debugar!

Precisava sincronizar o buffer com o arquivo em disco!

Segue código atualizado

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

int main(int argc, char* argv[])
{
    int p;
    char c; // caractere do arquivo
    int cripto; // caractere encriptado do arquivo
    int key = atoi (argv[2]); // senha

    if (argc != 3) // verifica número de parâmetros
    {
        cout << "\nErro, use 2 parametros como: c:\\meuarquivo.xxx senha" << endl;
        exit(1);
    }

    else if (key  < 0 || key > 255) // verifica a senha
    {

        cout << "\nErro, a senha deve ser um numero de 0 a 255" << endl;
        exit(1);
    }

    fstream inout (argv[1], ios::in | ios::out | ios::binary); // abre o arquivo

    if (!inout.is_open()) // verifica erro ao abrir arquivo
    {
        cout << "\nErro ao abrir arquivo" << endl;
        exit(1);
    }

    while (inout.good())
    {
        inout.get(c); // lê caracter
        cripto = (int)c + key; // aplica a senha
        inout.seekp( -1, ios_base::cur); // volta uma posição
        inout.put((char)cripto); // escreve caracter no arquivo
        inout.sync(); // sincroniza!
    }

    inout.close(); // fecha o arquivo
    cout << "\nCriptografado com sucesso!" << endl;
    return 0;
}

Editado por Gaba_
Link para o comentário
Compartilhar em outros sites

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...