Ir para conteúdo

POWERED BY:

Arquivado

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

vega!

[Resolvido] Não consigo atribuir valor para as estruturas em C

Recommended Posts

Ola, boa tarde!

To quebrando a cabeça com um fato que não consegui resolver.. Por isso peço ajuda.

 

Eu criei 3 estruturas dentro do meu programa. Uma estação, um trem e um passageiro.

No código , o usuário digita os atributos de cada um.

O problema é que ao rodar o programa, ele passa direto pela fase das atribuições e atribue qualquer valor. O que posso conferir na ultima parte do código aonde verifico os valores atribuidos

 

O que ja fiz:

- Tentei mudar o nome dos atributos , diferenciando das outras estruturas. Cheguei a deixar pas_1.pas_1.nome.. trem_1.trem_1.nome ( sem sucesso)

- Tentei antes das atribuições, alterar o valor para 0, tb sem sucesso. Se deixo "" (vazio) , da erro.

 

Segue o código

#include<stdio.h>
#include<conio.h>

   
int main(){

       struct estacao {   // Cria estrutura estação
       int numero;
       char nome[50];
       int capacidade;
       int lotacao_atual; }; 
              
struct trem {           // Cria estrutrua trem
       int numero;
       int velocidade;
       int capacidade;
       int lotacao_atual;
       int est_inicial;
       int est_final; };
       
struct passageiro {  // Criar estrutrua passageiro
       int CPF[11];
       char nome[30];
       int est_inicial;
       int est_final;
       int est_atual;
       int trem_atual; }; 

       struct estacao est_1; //declarar estacao
       struct passageiro pas_1; //declarar passageiro 
       struct trem trem_1; //declarar trem 
       
printf (" **** PROGRAMINHA DE ESTACOES **** " );
printf ("---------------------------------- " );
printf("\n\n\n\n\n\n");

// Inicio criação estações

printf("Criando estação...");
printf("\n\n");
printf("Numero da estacao:");
scanf("%d" , &est_1.numero);
printf("Capacidade:");
scanf("%d" , &est_1.capacidade);
printf("Lotacao Atual:");
scanf("%d" , &est_1.lotacao_atual);
printf("Nome:");
scanf("%d" , &est_1.nome);


// Fim criação estações

// Inicio criação trens

//Inicio da tentativa de resolver o problema alocando 0 ao atributo
trem_1.numero=0;
trem_1.velocidade=0;
trem_1.capacidade=0;
trem_1.lotacao_atual=0;
trem_1.est_inicial=0;
trem_1.est_final=0;
//Fim da tentativa de resolver o problema alocando 0 ao atributo

printf("Criando trem...");
printf("\n\n");
printf("Numero do trem:");
scanf("%d" , &trem_1.numero);
printf("Velocidade do trem:");
scanf("%d" , &trem_1.velocidade);
printf("Capacidade:");
scanf("%d" , &trem_1.capacidade);
printf("Lotacao Atual:");
scanf("%d" , &trem_1.lotacao_atual);
printf("Estacao Inicial:");
scanf("%d" , &trem_1.est_inicial);
printf("Nome:");
scanf("%s" , &trem_1.est_final);

// Fim criação trens

// Criação de passageiros

printf("Criando passageiro...");
printf("\n\n");
printf("Nome do passageiro:");
scanf("%s" , &pas_1.nome);
printf("CPF:");
scanf("%d" , &pas_1.CPF);
printf("Estacao Atual:");
scanf("%d" , &pas_1.est_atual);
printf("Estacao Inicial:");
scanf("%d" , &pas_1.est_inicial);
printf("Estacao FInal:");
scanf("%d" , &pas_1.est_final);
printf("Trem Atual:");
scanf("%s" , &pas_1.trem_atual);

// Fim criação passageiros

// Conferindo..

printf("Estacoes\n\n"); // Conferindo estacao
printf("Nome: %s\n" , est_1.nome);
printf("Numero: %d\n" , est_1.numero);
printf("Numero: %d\n" , est_1.capacidade);
printf("Numero: %d\n" , est_1.lotacao_atual);

printf("\n\nTrens\n\n"); // Conferindo trens
printf("Numero: %d\n" , trem_1.numero);
printf("Capacidade: %d\n" , trem_1.capacidade);
printf("Velocidade: %d\n" , trem_1.velocidade);
printf("Lotacao Atual: %d\n" , trem_1.lotacao_atual);
printf("Estacao Inicial: %d\n" , trem_1.est_inicial);
printf("Estacao Final: %d\n" , trem_1.est_final);

printf("\n\nPassageiros\n\n"); // Conferindo passageiros
printf("Nome: %s\n" , pas_1.nome);
printf("CPF: %d\n" , pas_1.CPF);
printf("Estacao Atual: %d\n" , pas_1.est_atual);
printf("Trem Atual: %d\n" , pas_1.trem_atual);
printf("Estacao Inicial: %d\n" , pas_1.est_inicial);
printf("Estacao Final: %d\n" , pas_1.est_final);


scanf("\n");

}

Eis a tela:

Imagem Postada

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido:

 

O comando fflush(stdin); limpa o buffer do teclado e nesse caso resolveu o problema e ele parou de ficar atribuindo valores "do nada" para as minhas variaveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom você postou na área errada.

- Seu problema foi resolvido?? bem até que foi neh, só que não é aconselhavel resolver da maneira que você utilizou, o correto é usar um token para extrair o '\n' da string.

 

[]s

 

---

 

Título Editado

 

Lógica de Programação e Algoritmos http://forum.imasters.com.br/public/style_emoticons/default/seta.gif C/C++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando token:

 

scanf("%s*c",&string);

Melhor que o

fflush(stdin)
e mais limpo!

 

Abçs...

 

Brigado gente.

Descobri que scanf não aceita espaço.

retirei os espaços e parou de dar o problema também

 

Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

scanf aceita espaços sim!

 

basta um:

 

scanf("%[^\n]",string);

Esse operador armazena tudo na string até "ver" \n, ou seja até você dar enter, lendo também os espaços!

 

o

scanf("%s",string)
enxerga o espaço como ponto final, no comando anterior ele enxerga o \n como esse ponto final.

 

Só mais uma dica...

 

Abçs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça a leitura de strings em C da seguinte forma

 

 

primeiro trabalhe com a biblioteca string.h

ficaria assim

 

#include<stdio.h>
#include<string.h>

main(){
         fflush(stdin); //faz leitura do buffer do teclado por isso o nome esta recebendo funda da string anterior que recebeu barra funda
         fgets(variavel,tamanho,stdin);  // corresponde ao scanf  no seu caso ficaria  fgets(pas_1.nome,30,stdin);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vinicius, não é por nada, mas o pessoal ja comentou que NÃO se deve utilizar fflush(stdin), ja explicamos 12131234123123 vezes o porquê disso, e como resolver o problema da forma correta...

Inclusive, existe um tópico em laboratório de códigos fontes (C/C++) falando sobre isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é possivel que aki no fórum de C/C++ o pessoal ainda me fala desse fflush(stdin);

Existem tópicos que deveriam ser de leitura obrigatória pra pessoa poder acessar o fórum.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é possivel que aki no fórum de C/C++ o pessoal ainda me fala desse fflush(stdin);

Existem tópicos que deveriam ser de leitura obrigatória pra pessoa poder acessar o fórum.

 

[]s

 

Se você não quer, coloque 'fflush(stdin)' na censura de palavras do forum de C/C++.

Desencana cara, o artigo explicando tah ae no fórum, lê quem quer e quem quiser se aprofundar. Coloca fonte tamanho 24 pra todo mundo ler.

Mas se mesmo lendo, tem gente usando ainda, deixa. Pt perseguição. Em todo tópico que alguem postar um programa aqui e tiver fflush(stdin), gets() e system("pause"), vcs vao ficar com essas frescuras ? ajuda a pessoa e boa e no final do seu Post você fala "Leia este artigo sobre FFLUSH(STDIN) - Recomendado."

Pronto! Simples, educado e acabou. O usuário Lê se quiser.

 

PS: desculpem o flood, mas você tabm floodou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não acredito que você vai contra quem quer ajudar?

 

O programa é meu???

R: Não, a pessoa vem aki pedir auxílio e a gente tenta da melhor maneira passar "boas práticas" de programação.

Com ctz cabe a ela se irá seguir ou não.

 

Eu usei sim um tom de ironia quando disse isso, + n acho motivo de revolta, ueh, aki é pra movimentar idéias.

 

Educado seria as pessoas antes de criar o tópico usar a busca do fórum, ler as regras e não as violarem.

No mais amigo, qlqr coisa me mande MP que a gente conversa numa boa, n vamos estender esse assunto aki ok?!

 

[]s

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.