Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rfernandesouza

Codigo exibe caracter estranho :0

Recommended Posts

Boa Tarde,

 

Temos o seguinte exercicio:

Escrever um programa que leia código e nome de 20 profissões. Após a leitura, tais valores devem ficar disponíveis para consulta, ou seja, quando o usuário digitar um código, o programa deve emitir o NOME da profissão correspondente.

Como estrutura de dados, devemos ter um vetor com 20 posições, onde cada posição refere-se à um registro com dois campos: CODIGO e NOME.

type

registro = RECORD {TIPO QUE REPRESENTA}
codigo : inteiro {A TABELA DE CODIGOS E PRDEISSOES}
nome : string[8]
FIM
var
tabela : VETOR [1..20] de registro
codigodesejado, i, k : inteiro

inicio

escreva ('LEITURA DOS CODIGOS DAS PROFISSOES')
para i1 até 20 faça
inicio
escreva ('codigo : ')
leia (tabela.codigo)
escreva ('nome : ')
leia (tabela.nome)
fim

escreva ('IDENTIFICACAO DE CODIGOS DAS PROFISSOES')
para i1 até10 faça
inicio
escreva ('codigo desejado: ')
leia (codigodesejado)
k1
enquanto (tabela[k].codigo <> codigodesejado) AND (k<20) faça
kk+1
fimenquanto
se tabela[k].codigo = codigodesejado então
escreva ('nome: ',tabela[k].nome)
senão

escreva ('CODIGO INVALIDO')
fimpara
fim

Fiz o código-fonte mas quando coloco o ultimo código (código pedido no programa, não o código-fonte) e peço o retorno no final, ele exibe um caracter estranho, e quando digito um código que não é cadastrado ele nao exibe "Código Inválido" como pedido.

Alguém pode me ajudar?

Segue o código:

#include <stdio.h>
#include <stdlib.h>
 
 typedef struct {
         int codigo;
         char nome[8];
         } cadastroprof;
 
int main()
{
 int i, k, codigodesejado;
 
         cadastroprof tabela[20];
 
 for (i=1 ; i<=20 ; i=i+1)
 {
     printf ("----------------PROGRAMA PROFISSOES---------------- \n\n");
     printf ("Passo 1 - Leitura dos codigos das profissoes. \n");
     printf ("Digite o codigo da profissao de numero %d: ", i);
     scanf ("%d", &tabela[i].codigo);
     fflush (stdin);
     printf ("Digite o nome da profissao de numero %d: ", i);
     gets (tabela[i].nome);
     system ("cls");
 }
 
 system ("cls");
 
 
 for (i=1 ; i<=10 ; i=i+1)
 {
     printf ("----------------PROGRAMA PROFISSOES---------------- \n\n");
     printf ("Passo 2 - Identificacao de codigos das profissoes. \n");
     printf ("Digite o codigo desejado: ");
     scanf ("%d", &codigodesejado);
 
     k=1;
 
     while ((tabela[k].codigo!=codigodesejado) && (k<20))
     {
           k=k+1;
     }
 
     if (tabela[k].codigo=codigodesejado)
     {
           printf ("Nome da profissao selecionada: %s \n", &tabela[k].nome);
           system ("PAUSE");
           system ("cls");
     }
     else
     {
          printf ("Codigo Invalido! \n");
          system ("PAUSE");
     }
 }
 
 printf ("FIM \n");
 system("PAUSE");
 return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use system("pause").

Não use fflush(stdin).

Não use gets.

 

Leia o tópico fixo deste fórum.

 

O intervalo do seu loop está errado, pois os índices em C vão de 0 a n-1. Ou seja, você está gravando informações além da área alocada p/ o tipo de dados. Muito provável que seja essa a causa do caractere estranho, pois no endereço &tabela + 20 existe lixo em memória. Corrija e execute novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as alterações baseado no que você disse, o erro estava sim no número do vetor e também no operador lógico:

if (tabela[k].codigo=codigodesejado)

 

Foi alterado para:

if (tabela[k].codigo==codigodesejado)

 

Obrigado pelas dicas de fflush (stdin), system ("PAUSE") e gets, estarei estudando o assunto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.