Jump to content
jorge618

Variável corrompida

Recommended Posts

jorge618
void listar_data(bd * bdv) {  //Listar por data
	char dn[4];
	int i = 0, a = 0, n = 0;
	char dia_ins[2];
	char mes_ins[2];
	char dia_aux[2], mes_aux[2];

	while (i != 3) {
		printf("1-Listar por Data de Nascimento (Dia/Mes)\n2-Listar por Mes de nascimento\n3-Voltar ao menu anterior\n");
		scanf("%d", &i);
		if (i == 3) {
			return 0;
		}
		if (i == 1) {
			printf("Introduza o dia(com 2 digitos)\n");
			scanf("%s", &dia_ins);
			printf("Introduza o mes(com 2 digitos)\n");
			scanf("%s", &mes_ins);

			//printf("%s , %s, %s", atoi(data_ins));
			for (n = 0; n < bdv->npessoas; n++)
			{
				dia_aux[0] = bdv->vp[n].datanasc[0];
				dia_aux[1] = bdv->vp[n].datanasc[1];
				mes_aux[0] = bdv->vp[n].datanasc[3];
				mes_aux[1] = bdv->vp[n].datanasc[4];

				if (dia_aux[0] == dia_ins[0] && dia_aux[1] == dia_ins[1]) {
					if (mes_aux[0] == mes_ins[0] && mes_aux[1] == mes_ins[1]) {
						printf("%d %s\n", bdv->vp[n].codigo, bdv->vp[n].nome);
					}
				}
			}
		}
		if (i == 2)
		{
			printf("Introduza o mes(com 2 digitos)\n");
            scanf("%s", &mes_ins);
			for (n = 0; n < bdv->npessoas; n++)
			{
				mes_aux[0] = bdv->vp[n].datanasc[3];
				mes_aux[1] = bdv->vp[n].datanasc[4];

					if (mes_aux[0] == mes_ins[0] && mes_aux[1] == mes_ins[1]) {
						printf("%d %s\n", bdv->vp[n].codigo, bdv->vp[n].nome);
				}
			}
		}
	}
}
#include "struct_cidadao.h"
typedef struct {
	pessoa *vp;
	int npessoas;
}bd;
#define MAX_NOME 200
#define MAX_CIDADE 100
#define MAX_DATA 11
typedef struct {
	int codigo;
	char nome[MAX_NOME];
	char localidade[MAX_NOME];
	char datanasc[11];
	int idade;
              }pessoa;

Sem_T%C3%ADtulo.png

 

Se eu não correr nenhuma função, ou seja, carregar logo no 3 (voltar ao menu anterior), ele vai mas se eu executar uma das funções ou as duas e depois quiser voltar ao menu anterior aparece aquele erro. O erro será que esta no ciclo while ?

Obrigado desde já.

Cumps. jorge618

 

Edit : Esqueci-me de por a imagem

 

Edited by jorge618

Share this post


Link to post
Share on other sites
HappyHippyHippo

isto não e um jogo do adivinha. Diz exactamente qual e a mensagem de erros, assim qual a linha que a origina


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jorge618
5 minutos atrás, HappyHippyHippo disse:

isto não e um jogo do adivinha. Diz exactamente qual e a mensagem de erros, assim qual a linha que a origina

o programa executa, não há nenhuma linha que origina o erro. Tem razão esqueci-me de colocar a imagem

Share this post


Link to post
Share on other sites
HappyHippyHippo

qual o tamanho de memoria reservado quando instancias a variavel mes_ins ?

qual o tamanho de memória de uma string de dois caracteres?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jorge618

acho que não reservei memoria para a variável.

Acho que é 2 bits(mas não tenho a certeza).

Não tenho certezas de nada...

Edited by jorge618

Share this post


Link to post
Share on other sites
HappyHippyHippo

quando declaras uma variavel (instanciar) estas sempre a reservar memória. Olha para a declaração da variavel em questão e responde a pergunta.

no que toca ao tamanho da string, suponho que estas a responder 2 bytes. Se sim, diz que valores são necessários para guardar a string "ab" em memória? Por outras palavras, que valores existem em cada byte da c-style string

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jorge618

uma string de 2 caracteres não ocupa 2 bytes, ou seja o mês_ins também vai ocupar 2 bytes se eu não estiver em erro.

Se sim, diz que valores são necessários para guardar a string "ab" em memória? Por outras palavras, que valores existem em cada byte da c-style string

Não lhe sei responder a esta questão.

Edited by jorge618

Share this post


Link to post
Share on other sites
Xendro
1 minuto atrás, HappyHippyHippo disse:

quando declaras uma variavel (instanciar) estas sempre a reservar memória. Olha para a declaração da variavel em questão e responde a pergunta.

no que toca ao tamanho da string, suponho que estas a responder 2. Se sim, diz que valores são necessários para guardar a string "ab" em memória? Por outras palavras, que valores existem em cada byte da c-style string

desculpa intrometer-me mas acho que devias lembrar o "jorge618" de que uma variavel string deve ter um terminador 'null' (em C) que necessita de um byte.

Share this post


Link to post
Share on other sites
HappyHippyHippo
1 minute ago, Xendro said:

desculpa intrometer-me mas acho que devias lembrar o "jorge618" de que uma variavel string deve ter um terminador 'null' (em C) que necessita de um byte.

não sou eu que tenho de o lembrar. E ele que tens de se recordar das aulas. Porque achas que ando a volta desse assunto desde o inicio do topico

acredita que depois de se lembrar nunca mais iria se esquecer dos problemas que originam se esquecer de algo tao fundamental

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jorge618
6 minutos atrás, HappyHippyHippo disse:

de que estas a falar agora? Da string "ab" que perguntei?

era do meu nick. Ou como é tudo char conta tudo como 1? tipo 1[j]+1[o]+1[r]+1[g]+[e]+1[6]+1[1]+1[8]+1[/0] ?

Mas da string ab vai ocupar 3 bytes,(a[1]+b[1]+/0[1])certo?

Edited by jorge618

Share this post


Link to post
Share on other sites
HappyHippyHippo

nem vou comentar a absurdidade que escreveste na resposta anterior, do teu nick (vou supor que estas cansado).

agora que sabes que necessitas de N+1 bytes para guardar uma string com N carateres, diz (olhando para a declaração da variavel que e indicada no erro) quantos bytes estas a dizer que esta tem?

ps: Não voltes a escrever /0, quanto muito '\0'

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Esse problema até pode ter ficado resolvido mas no futuro vais continuar a ter os mesmos problemas! Não dissecaste a tua dúvida até ao fim e por isso vais continuar a tê-la!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.