Logo Hardware.com.br
rafaelgazzoni
rafaelgazzon... Membro Junior Registrado
140 Mensagens 0 Curtidas

programa em C nao grava campo....

#1 Por rafaelgazzon... 10/12/2004 - 01:47
Meu problema é o seguinte..eu coloco pra incluir ele inclui tudo certinho mas tem um campo que nao esta gravando (aluno.alu).... ja fiz de tudo e nada se eu for na parte de alteracao e pedir para ele alterar o aluno.alu ele grava na base de dados.!!!!!



struct escola
{ char exc;
int matricula;
char ano[4];
char alu[50], curso [50];
}aluno;

void inclusao()
{ int codigo,i, erro;
char xx[10], opcao;
do{
tela();
gotoxy (20,38);
textcolor (WHITE);
gotoxy ((80-strlen ("INCLUSAO DE ALUNOS&quot)/2,5);
cprintf ("INCLUSAO DE ALUNOS"
limpa();
gotoxy (20,38);
textcolor (WHITE);
cprintf ("Entre com a matricula do aluno"
do {
gotoxy (6,8);
textcolor (22);
cprintf ("CODIGO : "
flushall();
gets (xx);
erro = 0;
for (i = 0; i< strlen (xx); i++)
if ((xx[i] >= '0' && xx[i] <= '9'))
erro++;
codigo = atoi (xx);
} while ((erro != strlen (xx)) || (codigo<=0));

if (verifica(codigo))
{ limpa();
textcolor (WHITE);
cprintf ("Aluno j  matriculado, pressione <ENTER>&quot;
getch();
}
else
{ limpa();
gotoxy (20,38);
textcolor (WHITE);
aluno.matricula = codigo;
cprintf ("Entre com o nome do Aluno&quot;
textcolor (22);
gotoxy (6,10);
cprintf ("Nome : &quot;
textcolor (WHITE);
flushall();
/*gets (aluno.alu);
for (i=0; i< strlen (aluno.alu); i++)
aluno.alu[i] = toupper (aluno.alu[i]);
*/
gets (aluno.alu);
for (i=0; i< strlen (aluno.alu); i++)
aluno.alu[i] = toupper (aluno.alu[i]);
do{
limpa();
gotoxy (20,38);
textcolor (WHITE);
cprintf ("Informe o Curso&quot;
textcolor (22);
gotoxy (6,12);
cprintf ("Curso : &quot;
textcolor (WHITE);
flushall();
gets (aluno.curso);

for (i=0; i< strlen (aluno.curso); i++)
aluno.curso[i] = toupper (aluno.curso[i]);
// do {
limpa();

gotoxy(20,38);
textcolor(WHITE);
cprintf("Informe o Ano de Matricula&quot;
textcolor(22);
gotoxy(6,14);
cprintf("Ano : &quot;
textcolor(WHITE);
flushall();
gets(aluno.ano);
gotoxy (20,38);
textcolor (WHITE);
cprintf("Gravar o registro do Aluno (S/N)? : &quot;
opcao = toupper(getch());
}while (opcao!='S' && opcao!= 'N');
if (opcao == 'S')
{ aluno.exc = ' ';
fseek (cadastro, 0, SEEK_END);
fwrite (&aluno, sizeof(struct escola), 1, cadastro);
}
}
do {
limpa();
gotoxy (20,38);
textcolor (WHITE);
cprintf("Deseja incluir novo Aluno (S/N)?: &quot;
opcao = toupper(getch());
}while (opcao!='S' && opcao!= 'N');
} while (opcao != 'N');
tela();
}
void main()
{
// cria ou abre arquivo para leitura e gravacao
if ((cadastro = fopen("BANCD.DAT","r+&quot) == NULL)
{ cadastro = fopen("BANCD.DAT","w+" }
.....}

alguem tem alguma sugestão????
se precisar de alguma coisa a mais e so falar....e so falar....


Desde ja muito grato!!!!! big_green.png
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#3 Por jackinabox
10/12/2004 - 13:57
A formatação do código tá difícil, hein? Seria aconselhável formatar corretamente antes de postar.

Seu código é um pouco perigoso, pois os campos têm um tamanho específico, e o usuário pode entrar com um número de caracteres maior do que o tamanho reservado para o campo. Observe que ano[4] pode armazenar apenas 3 caracteres (e mais o terminador). Se você está digitando 4 caracteres, o terminador irá sobrescrever a primeira posição do próximo campo, que é char alu[50], causando o erro citado.


struct escola
{
char exc;
int matricula;
char ano[4];
char alu[50], curso [50];
}aluno;
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal