Jump to content

Variável corrompida


jorge618

Recommended Posts

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;

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
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.