Le liste problema caricamento da file e stampa

davidson

Nuovo Utente
Salve ho avuto un problema nel scrivere un programma che mi legga da file una serie di numeri, uno per ogni riga e me lo salvi sulla lista dopodichè stampa la lista disordinata e successivamente stampare la list ordinata
compilo eseguo e rimane bloccato

Codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>



struct listinfo
{
    int elem;
    struct listinfo *prox;
};

typedef struct listinfo lista;

//Prototipi di funzione//
lista* inizializza(lista *pointer);
lista* inseriscitesta(lista *pointer,int elemento);
lista* inseriscicoda(lista *pointer,int elemento);
lista* carica(lista *pointer);
lista* ordina(lista *pointer);
void stampa(lista *pointer);


int main()

{
int i;
lista *lista1;
//inizializza la lista vuota//
lista1 = inizializza(lista1);
lista1 = carica(lista1);
printf("la lista risultante e'");
stampa(lista1);

printf("la lista ordinata risultante e'");
lista1=ordina(lista1);
stampa(lista1);

return 0;
}


void stampa(lista *pointer)
{
lista *punt;
punt=pointer;
while(punt!=NULL)
{
  printf("%d   ",punt->elem);

  punt=punt->prox;}}


lista* inizializza(lista*pointer)
{
   pointer = NULL;
   return NULL;
}


// inserimento in testa

lista* inseriscitesta(lista *pointer,int elemento)
{lista *punt,*testa;
punt=(lista*)malloc(sizeof(lista));
punt->elem=elemento;
punt->prox=pointer;
pointer=punt;
return pointer;}

/*lista* inseriscicoda(lista *pointer,int elemento)
{
lista *punt,*cursore,*cursore1;
cursore=pointer;

punt=(lista*)malloc(sizeof(lista));   //dato da inserire
punt->elem=elemento;
punt->prox=NULL;

if (pointer==NULL) {pointer=punt;}   //se la lista è vuota lo metto in testa
else{

while(cursore!=NULL)         //scansione fino alla fine
{cursore1=cursore;           //cursore1 serve per avere l'ultima posizione di cursore
  cursore=cursore->prox;}
  cursore1->prox=punt;}
return pointer;}


*/

lista* carica(lista* pointer)
{
int a,b;
FILE *fp;
if((fp=fopen("numeri.txt","r"))==NULL) return pointer;
pointer=NULL;
while (b=(fscanf(fp,"%d",&a))!=EOF)
{
pointer=inseriscitesta(pointer,a);
}

fclose(fp);
return pointer;
}





lista* ordina(lista *pointer)
{
    if (pointer && pointer->prox) {
        int k;

        do {
                        lista *punt = pointer;

            k = 0;
            while (punt->prox) {
                lista *punt1 = punt;

                punt = punt->prox;
                if ((punt1->elem) > (punt->elem)) {
                    int tmp = punt1->elem;

                    punt1->elem = punt->elem;
                    punt->elem = tmp;
                    k = 1;
                }
            }
        } while (k != 0);
    }

    return pointer;
}
 

Entra

oppure Accedi utilizzando