Ir ao conteúdo

Posts recomendados

Postado
Eu queria testar esse programa, digitar 2 vezes as informaçoes pedidas no main. Mas assim que eu digito a primeira vez e dou enter, aparece "programa parou de funcionar e precisa ser fechado"

porque acontece isso?

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

 

 

 

/* Estrutura para armazenar os dados das AVIÕES. */

struct Voo{

        int tempoAtual;

        char identificacao;

        char idAVI[8];

        int prioridade, tempoEsperaAVI;

};

typedef struct Voo* voo;

typedef struct elemento* Lista;

struct elemento{

    voo dados[2];

    struct elemento* prox;

};

typedef struct elemento Elem;

 

 

int main(){

    int i=0;

    char a;

           voo dados[2];

           for(i=0;i<2;i++){

           scanf("%d", &(dados->tempoAtual));

           scanf("%c", &dados->identificacao);

           scanf("%s", &dados->idAVI[8]);

           scanf("%d", &(dados->prioridade));

           scanf("%d", &(dados->tempoEsperaAVI));

           scanf("%c", &a);

           }

    return 0;

}

Postado

voo dados[2]; dentro de main é um array de ponteiros, ou seja...

isso: voo dados[2];

é igual a isso: Voo *dados[2];

 

para o unoco que serve é para guardar a direção de uma estrutura, e al parecer você ainda não atribuiu a direção de uma estrutura a dados. Para que faça uma ideia do que eu to falando olhe isso:

#include <stdio.h>struct Voo {    int tempoAtual;    char identificacao;    char idAVI[8];    int prioridade, tempoEsperaAVI;};typedef struct Voo* voo;int main() {    struct Voo v1;    struct Voo v2;        v1.tempoAtual = 100;    v2.tempoAtual = 200;            voo dados[2];        dados[0] = & v1;    dados[1] = & v2;        printf ( "%d\n", dados[0]->tempoAtual);    printf ( "%d\n", dados[1]->tempoAtual);        return 0;}

você não pode atribuir valores com scanf a um ponteiro, mas sim ao elemento ao que aponta, esse é o erro, você trata dados[] como array de estruturas mas na realidade é um array de ponteiros a Voo. ;)

 

Hm, tinha um erro de parenteses nos scanfs, eu corrigi isso mas o erro continuou. Deve ter sido isso que você falou o problema, mas eu nao entendi o que você falou ! Porque, pelo menos corrigindo os parentes, eu nao atribui valor com scanf a um ponteiro, mas sim ao elemento que ele aponta!

 

  scanf("%d", &(dados->tempoAtual));

O elemento tempoAtual da estrutura de nome dados, na posição irá receber o valor digitado pelo usuario. Ou seja, quem ta recebendo o valor é quem está sendo apontado! você pode corrigir o codigo que escrevi para ficar correto? 

Mais uma duvida extra, eu preciso ficar lendo as informaçoes até o usuario digitar F de aeroporto fechado, então como eu posso organizar esse for? Em sintese eu tenho que ficar lendo as informaçoes dos voos, mas quando o usuario digitar F então o aeroporto fechou e nao precisa mais ler....

Postado

Basicamente você nao feis

  • dados[0] = & v1;
  • dados[1] = & v2;

dados não aponta a nada.

 

Sobre como ler até o usuario entrar com F faça algo como:

 for(i=0;i<2&& opcao != 'F';i++){

 

ou ponha um if (opção == 'F'){break;}, para isso melhor um while que um for.

Então você declarou struct Voo v1 e v2 porque no looping eu coloquei i<2. Mas no problema de fato eu nao sei ate quando o i vai ir, vai ser ate quando digitarem F, então como eu vou fazer dados=&v se eu não sei quantos structs Voo v eu vou precisar? tecnicamente eu n sei quantos voos eu vou receber...

Postado

Hmm..eu decidi tirar o * antes de dados, fazer struct Voo dados , porque é o unico jeito que consegui pro programa nao dar erro. Mas surgiu outra duvida se você puder ver na PM que mandei...

De qualquer forma, 

 

Pois usando malloc =)

Usando malloc nao seria:

Voo v = (Voo) malloc(sizeof(Voo));

 

Isso faz com que a variavel v tenha seu espaço armazenado dinamicamente, certo? Mas eu não entendi a associação entre usar malloc e conseguir fazer um ciclo for : O trecho de codigo seria:

 

Voo v = (Voo) malloc(sizeof(Voo));

dados=&v;

for(i=0;i<n;i++){

           scanf("%d", &(dados->tempoAtual));
           scanf("%c", &dados->identificacao);
           scanf("%s", &dados->idAVI[8]);
           scanf("%d", &(dados->prioridade));
           scanf("%d", &(dados->tempoEsperaAVI));
}
Seria assim? Mas,ta dando erro xD
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!