Ir ao conteúdo
  • Cadastre-se

Dúvida - Problema com Struct


Ir à solução Resolvido por Ansi C,

Posts recomendados

acontece o seguinte:

Eu digito o codigoCliente e o nomeCliente q estão armazenados numa struct. quando eu apago o codigoCliente, ele tmbm apaga o nomeCliente.
Depois de muitos testes, eu simplesmente criei uma nova variavel para substituir EM TUDO, no código, a nomeCliente. Ex:
 
 

structs xxx{
  //char nomeCliente[50];
  char codigoCliente[10];
}cliente;
 
   char variavel[50];   // usada para substituir a cliente.nomeCliente
 
 
 
criei fora dessa struct outra variável similar e alterei-a em todo o código
 
pronto. o programa funcionou.
 
Então, por que, provavelmente, o erro aparece apenas quando estou utilizando a variável da struct?
Link para o comentário
Compartilhar em outros sites

O fato é que o código funciona. Mas, ao utilizar um campo da struct, um campo sobrescreve o outro. E ao utilizar uma variável para armazenar os campos, fora da struct, o programa flui normalmente. Tentei limpar buffer e coisas do tipo, por eu estar usando as Setas direcionais achei que pudesse ser isso, mas vi que meu código está totalmente funcional se eu não armazenar numa struct.
Só gostaria de saber se é possível haver algum conflito, ou algo do tipo, entre structs. 

Mostrei à outros programadores C, nenhum conseguiu explicar o que estava acontecendo, pois o código flui normalmente ao não utilizar struct como estrutura de dados de armazenamento.

 

ps: o código é muito grande para ser postado, devido a interface criada.(pog)

Link para o comentário
Compartilhar em outros sites

Uma forma de tentar entender o que está acontecendo, é exibir o endereço dos elementos que você está apagando. Por exemplo

printf("Endereco = %p\n", &tmpCampos.texto[cont]);
Verifique também o endereço do outro campo e da variável cont.

De qualquer forma, para apagar tente atribuir ' ' até cont < limiteCampo.

Dessa forma

for (cont = 0; cont < limiteCampo; cont++){    tmpCampos.texto[cont] = ' ';}tmpCampos.texto[0] = '\0';

Ou então apenas atribua '\0' no primeiro elemento. Já que atribuindo ' ' ou qualquer outro caractere continuará ocupando espaço na memória

Link para o comentário
Compartilhar em outros sites

Ah, obrigado. Mas, o problema ainda ficou em incógnita. Pois, "com struct" não funciona, "sem struct" funciona. Os comandos estão todos funcionais. Mas se eu uso eles para adicionar/remover/alterar duma struct, dá errado por algum motivo desconhecido.
Você pediu pra testar os endereços, já fiz isso e muitas outras coisas. Mas ainda não consigo entender o porquê de não funcionar numa estrutura de dados struct, apenas em variáveis.

Link para o comentário
Compartilhar em outros sites

Veja esse exemplo simples, não deu nenhum problema.

#include <stdio.h>#include <string.h>typedef struct teste{    char nome[4];    char codigo[4];}Teste;int main(){    Teste x;    int i;    strcpy(x.nome, "ABC");    strcpy(x.codigo, "123");    for(i = 0; i < 4; i++){        x.codigo[i] = NULL;    }    x.codigo[0] = '\0';    printf("%s, %s\n", x.codigo, x.nome);    return 0;}
Link para o comentário
Compartilhar em outros sites

Mostrei hoje à meus colegas o problema. Realmente, nenhum soube explicar. Não achei nenhum conteúdo na internet que explique o fato.

Fiz o seguinte:
executei. deu erro.

tirei a variável de dentro da struct. executei. deu certo.

 

disseram que realmente não fazia sentido.

 

Escrevo o Código. Logo escrevo algo no Nome. Teclo Seta pra Cima. o nome desaparece.

antes.jpg

 

Dou replace na variável tmpCliente.nomeCliente que está dentro da struct e substituo por uma comum nomeCliente.

replace.jpg

 

E então, o problema se corrige por sei lá qual motivo.

depois.jpg

Link para o comentário
Compartilhar em outros sites

@Grégori Sória

 

 

Bacana a interface.. Está desenhando com o quê?

 

 

Bom, vi que você está fazendo entrada formatada. Você está fazendo o tratamento correto das teclas direcionais?

 

 

Faça um teste. Inclua aquele campo foo do jeito como está ali e veja o que acontece.

...char codigoCliente[6];char foo[10];char nomeCliente[50];...

[ ]'s

Link para o comentário
Compartilhar em outros sites

@Grégori Sória

 

 

Bacana a interface.. Está desenhando com o quê?

 

 

Bom, vi que você está fazendo entrada formatada. Você está fazendo o tratamento correto das teclas direcionais?

 

 

Faça um teste. Inclua aquele campo foo do jeito como está ali e veja o que acontece.

...char codigoCliente[6];char foo[10];char nomeCliente[50];...

[ ]'s

 

 

Não ocorreu nenhuma alteração, com sua sugestão. Talvez hoje conseguirei a solução, visto que irei ver com um conhecido meu, experiente em C.

 

Estou usando _getch() para entradas de caracteres especiais(setas) e getch() para entradas de caracteres comuns. Para evitar alguns problemas futuros, fiz com que o usuário deva apertar Enter para selecionar o campo que deseja digitar, e novamente Enter para deselecionar. E assim poder navegar entre os campos novamente.

 

A respeito da interface, fiz tudo em Conio.c.

Link para o comentário
Compartilhar em outros sites

Isso é mais provével. Visto que utilizo a IDE CodeBlocks(coisa do curso) que contém alguns erros de compilação. 

Foi a mais provável "solução" do problema. Pois é um erro sem sentido à lógica!

 

Vou fechando o tópico aqui, visto que parece ser "coisa do compilador" (GNU). 

Obrigado a todos.

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...