Jump to content
Sign in to follow this  
heavenheart

Listas ligada simples

Recommended Posts

heavenheart

Ola desculpem ser sempre o mesmo xato mas tou com um ligeiro problema no meu programa eu kero inserir uns certos dados numa lista

void menucomprasvendas() 
{int opcao,cl,i=0,ia=0,ic=0,resc,id,ca,paga,quant,cca,ccl,data;
char pass[10];
char art[50];
float preco;


printf("Qual é o seu Codigo de Cliente:\n");
scanf("%d",&cl);
while(cl!=Num[i].codigocliente)
{i++;
}
printf("Password:");
scanf("%s",&pass);
if(strcmp(pass,Num[i].password) == 0){
if(Num[i].blokiado==1){
printf("O seu Cartao esta Bloqueado");
menu();
}else{

printf("\n\n----------------------------\n");

printf("1-Comprar\n");
printf("2-Pagar Divida\n");
printf("3-Listar Compras Efectuadas\n");
printf("4-Plafon Actual\n");
printf("7-Divida Com Juros\n");
printf("8-Guardar Factura");
printf("0-Sair\n");
printf("----------------------------\n");
printf("Opcao?");
printf("----------------------------\n");

scanf("%d",&opcao);
while(opcao!=0)
    {
     switch(opcao)
     {case 1:printf("Qual e o seu Codigo de cliente?");
     scanf("%d",&cl);
while(cl!=Num[ic].codigocliente)
{ic++;
}
ccl=Num[ic].codigocliente;
listar();
printf("Qual e o Artigo que deseja?");
scanf("%d",&ca);
while(ca!=Stock[ia].codigo)
{ia++;
}
cca=Stock[ia].codigo;
printf("Quantos artigos deseja ?");
scanf("%d",&quant);
preco=Stock[ia].preco;
strcpy(art,Stock[ia].nome);
LL compras;
compras = (LL)malloc(sizeof(struct compras));
compras->idcompra = id;
compras->codigocliente = ccl;
compras->codigoartigo = cca;
strcpy(compras->artigo,art);
compras->preco = preco;
compras->data = data;
compras->paga = 1;
compras->seguinte = compras;
Num[ic].plafon=Num[ic].plafon-(preco*quant);
Stock[ia].quantidade=Stock[ia].quantidade-quant;
                                                 break;
      case 2:break;
      case 3: listarcompras(compras);
              break;
      case 4:printf("Codigo Cliente?");
              scanf("%d",&cl);
              resc = consultarplafon(cl);
              if (!resc) printf("Codigo nao existe");
              break;
      case 7: break;
      case 8: break;
      case 9: break;
      case 0: break;
      default: printf("Opcao invalida\n");
              
     }       
     menu(); 
   scanf("%d",&opcao);         
  }
}
} 
else{ 
printf("Password Invalida!!!!!");}
}

Aki esta a estrutura

typedef struct compras
{int idcompra;
int codigocliente;
int codigoartigo;
char artigo[50];
float preco;
int data;
int paga;
int quantidade;
struct compras * seguinte;
} * LL;

e aki vai o listar

void listarcompras(LL compras)
{if(compras==NULL){
printf("Lista Vazia");
}else{

while(compras!=NULL){
printf("%d %d %d %s %.2f %d %d %d\n",compras->idcompra,compras->codigocliente,compras->codigoartigo,compras->artigo,compras->preco,compras->data,compras->paga,compras->quantidade);
  compras=compras->seguinte;
}
}
}

O codigo nao da nenhum erro a iniciar nem nda mas kando peço para listar nao lista nda e nem diz ke esta lista vazia nem nda se alguem me pudesse dar uma vista de olhos nisto se e do inserir ou mesmo do listar e ke eu ja vi varias vezes o codigo e nao vejo nenhum erro

Desde ja agradeço

Share this post


Link to post
Share on other sites
KTachyon

Um erro não relacionado, será:

compras->seguinte = compras;

Basicamente, vais estar sempre a ligar cada compra a si própria, em vez de teres uma lista tens várias listas ciclicas em memória, o que não é certamente o que pretendes.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
heavenheart

bem assim pelo menos ja me diz ke a lista esta vazia mas se tentar inserir e depois tente listar ele da um erro kando o peço para listar

Share this post


Link to post
Share on other sites
KTachyon

Assim, como?


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
heavenheart

Eu nao sei explicar mas pelo ke vejo sempre ke peço pra introduzir eu ponho lhe os dados e ele nao me introduz nda nas celulas da lista nao sei se e dos pointers ou de outra coisa nao percebo o porque de ele nao inserir nda na lista  ;)

Share this post


Link to post
Share on other sites
KTachyon

Repara que tu nunca crias a variável compras quando ele entra no switch case correspondente. A variável compras está num scope diferente. Sinceramente não percebo como é que isso compila, a não ser que tenhas uma variável compras no scope global.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
heavenheart

Desculpem la mas tenho uma pergunta alguem me sabe dizer como guardo num .txt e leio de um .txt uma lista ligada e que o metodo que eu uso e como faço para os vectores mas nao sei como por isso em listas e ke os Vectores e so por uam variavel tipo Total e ele chegar essa Total primeiro e depois fazer um "For" de cada vez mas nao sei fazer isso em listas pk eles nao tem apontadores.

Desde ja agradeço a vossa ajuda

Share this post


Link to post
Share on other sites
RSFalcon7

a primeira pergunta:

FILE *fp = fopen("ficheiro.txt","r");
char ch, linha[1024],*pt;
int fechado = 0, int i;

do{
    ch = getchar();
    i=0;
    do{
        linha[i]=ch;
        linha[++i]='\0';
        ch = getchar();
        if(ch == EOF) fechado =1;

        apontadorLista = listaAdd(apontadorLista,extrairDados(linha));

    while(ch != '\n' && fechado!=0);
while(fechado != 0);

a segunda não percebi o que querias, mas se é ordenar uma lista, mais vale fazer uma função que insira ordenado

PS: acentos e pontuação não faz mal a ninguém e deixa o forum muito mais bonito

Share this post


Link to post
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
Sign in to follow this  

×
×
  • 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.